diff --git a/src/main/java/egovframework/com/cmm/AltibaseClobStringTypeHandler.java b/src/main/java/egovframework/com/cmm/AltibaseClobStringTypeHandler.java new file mode 100644 index 0000000..e951c9b --- /dev/null +++ b/src/main/java/egovframework/com/cmm/AltibaseClobStringTypeHandler.java @@ -0,0 +1,110 @@ +package egovframework.com.cmm; +/* + * Copyright 2002-2005 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.IOException; +import java.io.Reader; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.jdbc.support.lob.LobCreator; +import org.springframework.jdbc.support.lob.LobHandler; +//import org.springframework.orm.ibatis.support.AbstractLobTypeHandler; +import egovframework.rte.psl.orm.ibatis.support.AbstractLobTypeHandler; +/** + * iBATIS TypeHandler implementation for Strings that get mapped to CLOBs. + * Retrieves the LobHandler to use from SqlMapClientFactoryBean at config time. + * + *

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

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

+ * << 개정이력(Modification Information) >>
+ *   
+ *   수정일      수정자           수정내용
+ *  -------       --------    ---------------------------
+ *   2009.3.11   이삼섭          최초 생성
+ *
+ * 
+ */ +@SuppressWarnings("serial") +public class ComDefaultCodeVO implements Serializable { + /** 코드 ID */ + private String codeId = ""; + + /** 상세코드 */ + private String code = ""; + + /** 코드명 */ + private String codeNm = ""; + + /** 코드설명 */ + private String codeDc = ""; + + /** 특정테이블명 */ + private String tableNm = ""; //특정테이블에서 코드정보를추출시 사용 + + /** 상세 조건 여부 */ + private String haveDetailCondition = "N"; + + /** 상세 조건 */ + private String detailCondition = ""; + + /** + * codeId attribute를 리턴한다. + * + * @return the codeId + */ + public String getCodeId() { + return codeId; + } + + /** + * codeId attribute 값을 설정한다. + * + * @param codeId + * the codeId to set + */ + public void setCodeId(String codeId) { + this.codeId = codeId; + } + + /** + * code attribute를 리턴한다. + * + * @return the code + */ + public String getCode() { + return code; + } + + /** + * code attribute 값을 설정한다. + * + * @param code + * the code to set + */ + public void setCode(String code) { + this.code = code; + } + + /** + * codeNm attribute를 리턴한다. + * + * @return the codeNm + */ + public String getCodeNm() { + return codeNm; + } + + /** + * codeNm attribute 값을 설정한다. + * + * @param codeNm + * the codeNm to set + */ + public void setCodeNm(String codeNm) { + this.codeNm = codeNm; + } + + /** + * codeDc attribute를 리턴한다. + * + * @return the codeDc + */ + public String getCodeDc() { + return codeDc; + } + + /** + * codeDc attribute 값을 설정한다. + * + * @param codeDc + * the codeDc to set + */ + public void setCodeDc(String codeDc) { + this.codeDc = codeDc; + } + + /** + * tableNm attribute를 리턴한다. + * + * @return the tableNm + */ + public String getTableNm() { + return tableNm; + } + + /** + * tableNm attribute 값을 설정한다. + * + * @param tableNm + * the tableNm to set + */ + public void setTableNm(String tableNm) { + this.tableNm = tableNm; + } + + /** + * haveDetailCondition attribute를 리턴한다. + * + * @return the haveDetailCondition + */ + public String getHaveDetailCondition() { + return haveDetailCondition; + } + + /** + * haveDetailCondition attribute 값을 설정한다. + * + * @param haveDetailCondition + * the haveDetailCondition to set + */ + public void setHaveDetailCondition(String haveDetailCondition) { + this.haveDetailCondition = haveDetailCondition; + } + + /** + * detailCondition attribute를 리턴한다. + * + * @return the detailCondition + */ + public String getDetailCondition() { + return detailCondition; + } + + /** + * detailCondition attribute 값을 설정한다. + * + * @param detailCondition + * the detailCondition to set + */ + public void setDetailCondition(String detailCondition) { + this.detailCondition = detailCondition; + } + + /** + * toString 메소드를 대치한다. + */ + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/src/main/java/egovframework/com/cmm/ComDefaultVO.java b/src/main/java/egovframework/com/cmm/ComDefaultVO.java new file mode 100644 index 0000000..e298843 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/ComDefaultVO.java @@ -0,0 +1,210 @@ +package egovframework.com.cmm; + +import java.io.Serializable; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +import egovframework.itgcms.common.DefaultVO; + +/** + * @Class Name : ComDefaultVO.java + * @Description : ComDefaultVO class + * @Modification Information + * @ + * @ 수정일 수정자 수정내용 + * @ ------- -------- --------------------------- + * @ 2009.02.01 조재영 최초 생성 + * + * @author 공통서비스 개발팀 조재영 + * @since 2009.02.01 + * @version 1.0 + * @see + * + */ +@SuppressWarnings("serial") +public class ComDefaultVO extends DefaultVO implements Serializable { + + /** 검색조건 */ + private String searchCondition = ""; + + /** 검색Keyword */ + private String searchKeyword = ""; + + private String searchKeyword0 = ""; + + /** 질문유형 */ + private String schQestnTyCode = ""; + + /** 기타답변여부 */ + private String schEtcAnswerAt = ""; + + private String schDiv = ""; + + /** 검색사용여부 */ + private String searchUseYn = ""; + + /** 현재페이지 */ + private int pageIndex = 1; + + /** 페이지갯수 */ + private int pageUnit = 10; + + /** 페이지사이즈 */ + private int pageSize = 10; + + /** firstIndex */ + private int firstIndex = 1; + + /** lastIndex */ + private int lastIndex = 1; + + /** recordCountPerPage */ + private int recordCountPerPage = 10; + + /** 검색KeywordFrom */ + private String searchKeywordFrom = ""; + + /** 검색KeywordTo */ + private String searchKeywordTo = ""; + + public int getFirstIndex() { + return firstIndex; + } + + public void setFirstIndex(int firstIndex) { + this.firstIndex = firstIndex; + } + + public int getLastIndex() { + return lastIndex; + } + + public void setLastIndex(int lastIndex) { + this.lastIndex = lastIndex; + } + + public int getRecordCountPerPage() { + return recordCountPerPage; + } + + public void setRecordCountPerPage(int recordCountPerPage) { + this.recordCountPerPage = recordCountPerPage; + } + + public String getSearchCondition() { + return searchCondition; + } + + public void setSearchCondition(String searchCondition) { + this.searchCondition = searchCondition; + } + + public String getSearchKeyword() { + return searchKeyword; + } + + public void setSearchKeyword(String searchKeyword) { + this.searchKeyword = searchKeyword; + } + + public String getSearchKeyword0() { + return searchKeyword0; + } + + public void setSearchKeyword0(String searchKeyword0) { + this.searchKeyword0 = searchKeyword0; + } + + public String getSchQestnTyCode() { + return schQestnTyCode; + } + + public void setSchQestnTyCode(String schQestnTyCode) { + this.schQestnTyCode = schQestnTyCode; + } + + public String getSchEtcAnswerAt() { + return schEtcAnswerAt; + } + + public void setSchEtcAnswerAt(String schEtcAnswerAt) { + this.schEtcAnswerAt = schEtcAnswerAt; + } + + public String getSchDiv() { + return schDiv; + } + + public void setSchDiv(String schDiv) { + this.schDiv = schDiv; + } + + public String getSearchUseYn() { + return searchUseYn; + } + + public void setSearchUseYn(String searchUseYn) { + this.searchUseYn = searchUseYn; + } + + public int getPageIndex() { + return pageIndex; + } + + public void setPageIndex(int pageIndex) { + this.pageIndex = pageIndex; + } + + public int getPageUnit() { + return pageUnit; + } + + public void setPageUnit(int pageUnit) { + this.pageUnit = pageUnit; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + + /** + * searchKeywordFrom attribute를 리턴한다. + * @return String + */ + public String getSearchKeywordFrom() { + return searchKeywordFrom; + } + + /** + * searchKeywordFrom attribute 값을 설정한다. + * @param searchKeywordFrom String + */ + public void setSearchKeywordFrom(String searchKeywordFrom) { + this.searchKeywordFrom = searchKeywordFrom; + } + + /** + * searchKeywordTo attribute를 리턴한다. + * @return String + */ + public String getSearchKeywordTo() { + return searchKeywordTo; + } + + /** + * searchKeywordTo attribute 값을 설정한다. + * @param searchKeywordTo String + */ + public void setSearchKeywordTo(String searchKeywordTo) { + this.searchKeywordTo = searchKeywordTo; + } +} diff --git a/src/main/java/egovframework/com/cmm/EgovComCrossSiteHndlr.java b/src/main/java/egovframework/com/cmm/EgovComCrossSiteHndlr.java new file mode 100644 index 0000000..2e34539 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovComCrossSiteHndlr.java @@ -0,0 +1,405 @@ +package egovframework.com.cmm; + +import java.io.IOException; +import java.io.Reader; + +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.PageContext; +import javax.servlet.jsp.tagext.BodyTagSupport; + +import org.apache.taglibs.standard.tag.common.core.Util; + +/** + * Cross-Site Scripting 체크하여 값을 되돌려 받는 핸들러 JSP TLD, 자바에서 사용가능 + * + * @author 공통서비스 장동한 + * @since 2010.11.09 + * @version 1.0 + * @see
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일      수정자           수정내용
+ *  -------    --------    ---------------------------
+ *   2010.11.09  장동한          최초 생성
+ *
+ * 
+ */ +@SuppressWarnings("serial") +public class EgovComCrossSiteHndlr extends BodyTagSupport { + + /* + * (One almost wishes XML and JSP could support "anonymous tags," given the + * amount of trouble we had naming this one!) :-) - sb + */ + + // ********************************************************************* + // Internal state + + protected Object value; // tag attribute + protected String def; // tag attribute + protected boolean escapeXml; // tag attribute + private boolean needBody; // non-space body needed? + + // ********************************************************************* + // Construction and initialization + + private final String m_sDiffChar ="()[]{}\"',:;= \t\r\n%!+-"; + //private String m_sDiffChar ="()[]{}\"',:;=%!+-"; + private final String m_sArrDiffChar [] = { + "(",")", + "[","]", + "{","}", + ""","'", + ",",":", + ";","=", + " ","\t", //" ","\t", + "\r","\n", //"\r","\n", + "%","!", + "+","-" + }; + + /** + * Constructs a new handler. As with TagSupport, subclasses should not + * provide other constructors and are expected to call the superclass + * constructor. + */ + public EgovComCrossSiteHndlr() { + super(); + init(); + } + + // resets local state + private void init() { + value = def = null; + escapeXml = true; + needBody = false; + } + + // Releases any resources we may have (or inherit) + public void release() { + super.release(); + init(); + } + + // ********************************************************************* + // Tag logic + + // evaluates 'value' and determines if the body should be evaluted + public int doStartTag() throws JspException { + + needBody = false; // reset state related to 'default' + this.bodyContent = null; // clean-up body (just in case container is + // pooling tag handlers) + + JspWriter out = pageContext.getOut(); + //System.out.println("EgovComCrossSiteFilter> ============================"); + try { + // print value if available; otherwise, try 'default' + if (value != null) { + //System.out.println("EgovComCrossSiteFilter> =value"); + String sWriteEscapedXml = getWriteEscapedXml(); + //System.out.println("EgovComCrossSiteFilter sWriteEscapedXml>" + sWriteEscapedXml); + out.print(sWriteEscapedXml); + return SKIP_BODY; + } else { + // if we don't have a 'default' attribute, just go to the body + if (def == null) { + needBody = true; + return EVAL_BODY_BUFFERED; + } + + //System.out.println("EgovComCrossSiteFilter def> ="+def); + + // if we do have 'default', print it + if (def != null) { + // good 'default' + out(pageContext, escapeXml, def); + //System.out.println("EgovComCrossSiteFilter> ="+def); + } + return SKIP_BODY; + } + } catch (IOException ex) { + throw new JspException(ex.toString(), ex); + } + } + + // prints the body if necessary; reports errors + public int doEndTag() throws JspException { + try { + //System.out.println("EgovComCrossSiteFilter ==== doEndTag"); + if (!needBody){ + return EVAL_PAGE; // nothing more to do + } + + // trim and print out the body + if (bodyContent != null && bodyContent.getString() != null){ + //String sWriteEscapedXml = getWriteEscapedXml(); + //out2(pageContext, escapeXml, sWriteEscapedXml.toString()); + //System.out.println("EgovComCrossSiteFilter> end"); + //System.out.println("EgovComCrossSiteFilter sWriteEscapedXml > sWriteEscapedXml"); + out(pageContext, escapeXml, bodyContent.getString().trim()); + + } + return EVAL_PAGE; + } catch (IOException ex) { + throw new JspException(ex.toString(), ex); + } + } + + // ********************************************************************* + // Public utility methods + + /** + * Outputs text to pageContext's current JspWriter. If + * escapeXml is true, performs the following substring replacements + * (to facilitate output to XML/HTML pages): + * + * & -> & < -> < > -> > " -> " ' -> ' + * + * See also Util.escapeXml(). + */ + public static void out(PageContext pageContext, boolean escapeXml, + Object obj) throws IOException { + JspWriter w = pageContext.getOut(); + + if (!escapeXml) { + // write chars as is + if (obj instanceof Reader) { + Reader reader = (Reader) obj; + char[] buf = new char[4096]; + int count; + while ((count = reader.read(buf, 0, 4096)) != -1) { + w.write(buf, 0, count); + } + } else { + w.write(obj.toString()); + } + } else { + // escape XML chars + if (obj instanceof Reader) { + Reader reader = (Reader) obj; + char[] buf = new char[4096]; + int count; + while ((count = reader.read(buf, 0, 4096)) != -1) { + writeEscapedXml(buf, count, w); + } + } else { + String text = obj.toString(); + writeEscapedXml(text.toCharArray(), text.length(), w); + } + } + + } + public static void out2(PageContext pageContext, boolean escapeXml, + Object obj) throws IOException { + JspWriter w = pageContext.getOut(); + + w.write(obj.toString()); + + } + + /** + * + * Optimized to create no extra objects and write directly to the JspWriter + * using blocks of escaped and unescaped characters + * + */ + private static void writeEscapedXml(char[] buffer, int length, JspWriter w) + throws IOException { + int start = 0; + + for (int i = 0; i < length; i++) { + char c = buffer[i]; + if (c <= Util.HIGHEST_SPECIAL) { + char[] escaped = Util.specialCharactersRepresentation[c]; + if (escaped != null) { + // add unescaped portion + if (start < i) { + w.write(buffer, start, i - start); + } + // add escaped xml + w.write(escaped); + start = i + 1; + } + } + } + // add rest of unescaped portion + if (start < length) { + w.write(buffer, start, length - start); + } + } + + /** + * + * Optimized to create no extra objects and write directly to the JspWriter + * using blocks of escaped and unescaped characters + * + */ + @SuppressWarnings("unused") + private String getWriteEscapedXml() throws IOException { + String sRtn = ""; + + Object obj = this.value; + + int start = 0; + String text = obj.toString(); + + int length = text.length(); + char[] buffer = text.toCharArray(); + boolean booleanDiff = false; + //String sDiffChar + //String sArrDiffChar + char[] cDiffChar = this.m_sDiffChar.toCharArray(); + + for(int i = 0; i < length; i++) { + char c = buffer[i]; + + booleanDiff = false; + + for(int k = 0; k < cDiffChar.length; k++){ + if(c == cDiffChar[k]){ + sRtn = sRtn + m_sArrDiffChar[k]; + booleanDiff = true; + continue; + } + } + + if(booleanDiff) continue; + + if (c <= Util.HIGHEST_SPECIAL) { + char[] escaped = Util.specialCharactersRepresentation[c]; + if (escaped != null) { + // add unescaped portion + //if (start < i) { + // sRtn = sRtn + text.substring(start, i - start); + //} + // add escaped xml + //sRtn = sRtn + escaped; + //System.out.println(buffer[i]+" :: " + escaped); + for (int j = 0; j < escaped.length; j++) { + //System.out.println(buffer[i]+" :>: " + escaped[j]); + sRtn = sRtn + escaped[j]; + } + //sRtn = sRtn+ escaped.toString(); + //sRtn = sRtn + String.valueOf(buffer[i]); + start = i + 1; + }else{ + sRtn = sRtn + c; + } + }else{ + sRtn = sRtn + c; + } + } + + return sRtn; + } + + /** + * + * Optimized to create no extra objects and write directly to the JspWriter + * using blocks of escaped and unescaped characters + * + */ + @SuppressWarnings("unused") + private String getWriteEscapedXml(String sWriteString) throws IOException { + + String sRtn = ""; + + Object obj = sWriteString; + + int start = 0; + String text = obj.toString(); + + int length = text.length(); + char[] buffer = text.toCharArray(); + boolean booleanDiff = false; + //String sDiffChar + //String sArrDiffChar + char[] cDiffChar = this.m_sDiffChar.toCharArray(); + + for(int i = 0; i < length; i++) { + char c = buffer[i]; + + booleanDiff = false; + + for(int k = 0; k < cDiffChar.length; k++){ + if(c == cDiffChar[k]){ + sRtn = sRtn + m_sArrDiffChar[k]; + booleanDiff = true; + continue; + } + } + + if(booleanDiff) continue; + + if (c <= Util.HIGHEST_SPECIAL) { + char[] escaped = Util.specialCharactersRepresentation[c]; + if (escaped != null) { + // add unescaped portion + //if (start < i) { + // sRtn = sRtn + text.substring(start, i - start); + //} + // add escaped xml + //sRtn = sRtn + escaped; + //System.out.println(buffer[i]+" :: " + escaped); + for (int j = 0; j < escaped.length; j++) { + //System.out.println(buffer[i]+" :>: " + escaped[j]); + sRtn = sRtn + escaped[j]; + } + //sRtn = sRtn+ escaped.toString(); + //sRtn = sRtn + String.valueOf(buffer[i]); + start = i + 1; + }else{ + sRtn = sRtn + c; + } + }else{ + sRtn = sRtn + c; + } + } + + return sRtn; + } + + // for tag attribute + public void setValue(Object value) { + this.value = value; + } + + // for tag attribute + public void setDefault(String def) { + this.def = def; + } + + // for tag attribute + public void setEscapeXml(boolean escapeXml) { + this.escapeXml = escapeXml; + } + + /** 2011.10.10 cmd 라인상에서 편의제공을 위해 제공, 필요없을시 삭제하여도 무방함 + public static void main(String[] args) throws IOException + { + + EgovComCrossSiteHndlr egovComCrossSiteHndlr = new EgovComCrossSiteHndlr(); + + egovComCrossSiteHndlr.value = "TRNSMIT"; + + String sCrossSiteHndlr = egovComCrossSiteHndlr.getWriteEscapedXml(); + //System.out.println("writeEscapedXml " + egovComCrossSiteHndlr.getWriteEscapedXml()); + /* + System.out.println("sCrossSiteHndlr|"+ sCrossSiteHndlr + "|"); + + try{ + System.out.println("TRY TEST 1"); + throw new Exception(); + }catch(Exception e){ + System.out.println("TRY TEST 2"); + }finally{ + System.out.println("TRY TEST 3"); + + } + } + */ + } + + diff --git a/src/main/java/egovframework/com/cmm/EgovComExcepHndlr.java b/src/main/java/egovframework/com/cmm/EgovComExcepHndlr.java new file mode 100644 index 0000000..58325dd --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovComExcepHndlr.java @@ -0,0 +1,51 @@ +package egovframework.com.cmm; + +import egovframework.rte.fdl.cmmn.exception.handler.ExceptionHandler; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @Class Name : EgovComExcepHndlr.java + * @Description : 공통서비스의 exception 처리 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 13. 이삼섭 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 13. + * @version + * @see + * + */ +public class EgovComExcepHndlr implements ExceptionHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovComExcepHndlr.class); + + /* + @Resource(name = "otherSSLMailSender") + private SimpleSSLMail mailSender; + */ + /** + * 발생된 Exception을 처리한다. + */ + public void occur(Exception ex, String packageName) { + //log.debug(" EgovServiceExceptionHandler run..............."); + + /* + try { + mailSender. send(ex, packageName); + log.debug(" sending a alert mail is completed "); + } catch (Exception e) { + LOGGER.error(packageName, ex); + } + */ + try { + LOGGER.debug(" EgovServiceExceptionHandler try "); + } catch (Exception e) { + } + LOGGER.error(packageName, ex); + } +} diff --git a/src/main/java/egovframework/com/cmm/EgovComOthersExcepHndlr.java b/src/main/java/egovframework/com/cmm/EgovComOthersExcepHndlr.java new file mode 100644 index 0000000..cc7b2f1 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovComOthersExcepHndlr.java @@ -0,0 +1,16 @@ +package egovframework.com.cmm; + +import egovframework.rte.fdl.cmmn.exception.handler.ExceptionHandler; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class EgovComOthersExcepHndlr implements ExceptionHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovComOthersExcepHndlr.class); + + public void occur(Exception exception, String packageName) { + //log.debug(" EgovServiceExceptionHandler run..............."); + LOGGER.error(packageName, exception); + } +} diff --git a/src/main/java/egovframework/com/cmm/EgovComponentChecker.java b/src/main/java/egovframework/com/cmm/EgovComponentChecker.java new file mode 100644 index 0000000..5acb325 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovComponentChecker.java @@ -0,0 +1,65 @@ +package egovframework.com.cmm; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Service; + + +/** + * EgovComUtil 클래스 + * + * @author 서준식 + * @since 2011.09.15 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *   
+ *   수정일      수정자           수정내용
+ *  -------    -------------    ----------------------
+ *   2011.09.15  서준식        최초 생성
+ * 
+ */ + +@Service("egovUtil") +public class EgovComponentChecker extends EgovAbstractServiceImpl implements ApplicationContextAware{ + + + public static ApplicationContext context; + + @SuppressWarnings("static-access") + public void setApplicationContext(ApplicationContext context) + throws BeansException { + + this.context = context; + } + + + /** + * Spring MVC에서 설정한 빈이 아닌 서비스 빈(컴포넌트)만을 검색할 수 있음 + * + */ + public static boolean hasComponent(String componentName){ + + try{ + Object component = context.getBean(componentName); + + if(component == null){ + return false; + }else{ + return true; + } + + }catch(NoSuchBeanDefinitionException ex){// 해당 컴포넌트를 찾을 수없을 경우 false반환 + return false; + } + } + + + +} diff --git a/src/main/java/egovframework/com/cmm/EgovMessageSource.java b/src/main/java/egovframework/com/cmm/EgovMessageSource.java new file mode 100644 index 0000000..63a1d5b --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovMessageSource.java @@ -0,0 +1,55 @@ +package egovframework.com.cmm; + +import java.util.Locale; + +import org.springframework.context.MessageSource; +import org.springframework.context.support.ReloadableResourceBundleMessageSource; + +/** + * 메시지 리소스 사용을 위한 MessageSource 인터페이스 및 ReloadableResourceBundleMessageSource 클래스의 구현체 + * @author 공통서비스 개발팀 이문준 + * @since 2009.06.01 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *   
+ *   수정일      수정자           수정내용
+ *  -------    --------    ---------------------------
+ *   2009.03.11  이문준          최초 생성
+ *
+ * 
+ */ + +public class EgovMessageSource extends ReloadableResourceBundleMessageSource implements MessageSource { + + private ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource; + + /** + * getReloadableResourceBundleMessageSource() + * @param reloadableResourceBundleMessageSource - resource MessageSource + * @return ReloadableResourceBundleMessageSource + */ + public void setReloadableResourceBundleMessageSource(ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource) { + this.reloadableResourceBundleMessageSource = reloadableResourceBundleMessageSource; + } + + /** + * getReloadableResourceBundleMessageSource() + * @return ReloadableResourceBundleMessageSource + */ + public ReloadableResourceBundleMessageSource getReloadableResourceBundleMessageSource() { + return reloadableResourceBundleMessageSource; + } + + /** + * 정의된 메세지 조회 + * @param code - 메세지 코드 + * @return String + */ + public String getMessage(String code) { + return getReloadableResourceBundleMessageSource().getMessage(code, null, Locale.getDefault()); + } + +} diff --git a/src/main/java/egovframework/com/cmm/EgovWebUtil.java b/src/main/java/egovframework/com/cmm/EgovWebUtil.java new file mode 100644 index 0000000..d4be476 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovWebUtil.java @@ -0,0 +1,109 @@ +package egovframework.com.cmm; + +import java.util.regex.Pattern; + +/** + * 교차접속 스크립트 공격 취약성 방지(파라미터 문자열 교체) + * + *
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일      수정자           수정내용
+ *  -------    	--------    ---------------------------
+ *   2011.10.10  한성곤          최초 생성
+ *
+ * 
+ */ + +public class EgovWebUtil { + public static String clearXSSMinimum(String value) { + if (value == null || value.trim().equals("")) { + return ""; + } + + String returnValue = value; + + returnValue = returnValue.replaceAll("&", "&"); + returnValue = returnValue.replaceAll("<", "<"); + returnValue = returnValue.replaceAll(">", ">"); + returnValue = returnValue.replaceAll("\"", """); + returnValue = returnValue.replaceAll("\'", "'"); + returnValue = returnValue.replaceAll(".", "."); + returnValue = returnValue.replaceAll("%2E", "."); + returnValue = returnValue.replaceAll("%2F", "/"); + return returnValue; + } + + public static String clearXSSMaximum(String value) { + String returnValue = value; + returnValue = clearXSSMinimum(returnValue); + + returnValue = returnValue.replaceAll("%00", null); + + returnValue = returnValue.replaceAll("%", "%"); + + // \\. => . + + returnValue = returnValue.replaceAll("\\.\\./", ""); // ../ + returnValue = returnValue.replaceAll("\\.\\.\\\\", ""); // ..\ + returnValue = returnValue.replaceAll("\\./", ""); // ./ + returnValue = returnValue.replaceAll("%2F", ""); + + return returnValue; + } + + public static String filePathBlackList(String value) { + String returnValue = value; + if (returnValue == null || returnValue.trim().equals("")) { + return ""; + } + + returnValue = returnValue.replaceAll("\\.\\./", ""); // ../ + returnValue = returnValue.replaceAll("\\.\\.\\\\", ""); // ..\ + + return returnValue; + } + + /** + * 행안부 보안취약점 점검 조치 방안. + * + * @param value + * @return + */ + public static String filePathReplaceAll(String value) { + String returnValue = value; + if (returnValue == null || returnValue.trim().equals("")) { + return ""; + } + + returnValue = returnValue.replaceAll("/", ""); + returnValue = returnValue.replaceAll("\\", ""); + returnValue = returnValue.replaceAll("\\.\\.", ""); // .. + returnValue = returnValue.replaceAll("&", ""); + + return returnValue; + } + + public static String filePathWhiteList(String value) { + return value; + } + + public static boolean isIPAddress(String str) { + Pattern ipPattern = Pattern.compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"); + + return ipPattern.matcher(str).matches(); + } + + public static String removeCRLF(String parameter) { + return parameter.replaceAll("\r", "").replaceAll("\n", ""); + } + + public static String removeSQLInjectionRisk(String parameter) { + return parameter.replaceAll("\\p{Space}", "").replaceAll("\\*", "").replaceAll("%", "").replaceAll(";", "").replaceAll("-", "").replaceAll("\\+", "").replaceAll(",", ""); + } + + public static String removeOSCmdRisk(String parameter) { + return parameter.replaceAll("\\p{Space}", "").replaceAll("\\*", "").replaceAll("|", "").replaceAll(";", ""); + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/cmm/ImagePaginationRenderer.java b/src/main/java/egovframework/com/cmm/ImagePaginationRenderer.java new file mode 100644 index 0000000..e4c099c --- /dev/null +++ b/src/main/java/egovframework/com/cmm/ImagePaginationRenderer.java @@ -0,0 +1,85 @@ +package egovframework.com.cmm; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.AbstractPaginationRenderer; + +import javax.servlet.ServletContext; + +import org.springframework.web.context.ServletContextAware; +/** + * ImagePaginationRenderer.java 클래스 + * + * @author 서준식 + * @since 2011. 9. 16. + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일      수정자           수정내용
+ *  -------    -------------    ----------------------
+ *   2011. 9. 16.   서준식       이미지 경로에 ContextPath추가
+ * 
+ */ +public class ImagePaginationRenderer extends AbstractPaginationRenderer implements ServletContextAware{ + + private ServletContext servletContext; + + String type ; + + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public ImagePaginationRenderer() { + // no-op + } + + public void initVariables(){ + String strWebDir = "/resource/common/img/common/"; + firstPageLabel = "
  • " + + "<<
  • "; + previousPageLabel = "
  • " + + "<
  • "; + currentPageLabel = "
  • {0}
  • "; + otherPageLabel = "
  • {2}
  • "; + nextPageLabel = "
  • " + + ">
  • "; + lastPageLabel = "
  • " + + ">>
  • "; + +/*//이미지 방식 + 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/egovframework/com/cmm/IncludedCompInfoVO.java b/src/main/java/egovframework/com/cmm/IncludedCompInfoVO.java new file mode 100644 index 0000000..c4cfdbd --- /dev/null +++ b/src/main/java/egovframework/com/cmm/IncludedCompInfoVO.java @@ -0,0 +1,50 @@ +package egovframework.com.cmm; + +/** + * IncludedInfo annotation을 바탕으로 화면에 표시할 정보를 구성하기 위한 VO 클래스 + * @author 공통컴포넌트 정진오 + * @since 2011.08.26 + * @version 2.0.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *   
    + *  수정일		수정자		수정내용
    + *  -------    	--------    ---------------------------
    + *  2011.08.26	정진오 		최초 생성
    + *
    + * 
    + */ +public class IncludedCompInfoVO { + + private String name; + private String listUrl; + private int order; + private int gid; + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getListUrl() { + return listUrl; + } + public void setListUrl(String listUrl) { + this.listUrl = listUrl; + } + public int getOrder() { + return order; + } + public void setOrder(int order) { + this.order = order; + } + public int getGid() { + return gid; + } + public void setGid(int gid) { + this.gid = gid; + } +} diff --git a/src/main/java/egovframework/com/cmm/LoginVO.java b/src/main/java/egovframework/com/cmm/LoginVO.java new file mode 100644 index 0000000..8716dbf --- /dev/null +++ b/src/main/java/egovframework/com/cmm/LoginVO.java @@ -0,0 +1,250 @@ +package egovframework.com.cmm; + +import java.io.Serializable; + +/** + * @Class Name : LoginVO.java + * @Description : Login VO class + * @Modification Information + * @ + * @ 수정일 수정자 수정내용 + * @ ------- -------- --------------------------- + * @ 2009.03.03 박지욱 최초 생성 + * + * @author 공통서비스 개발팀 박지욱 + * @since 2009.03.03 + * @version 1.0 + * @see + * + */ +public class LoginVO implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = -8274004534207618049L; + + /** 아이디 */ + private String id; + /** 이름 */ + private String name; + /** 주민등록번호 */ + private String ihidNum; + /** 이메일주소 */ + private String email; + /** 비밀번호 */ + private String password; + /** 비밀번호 힌트 */ + private String passwordHint; + /** 비밀번호 정답 */ + private String passwordCnsr; + /** 사용자구분 */ + private String userSe; + /** 조직(부서)ID */ + private String orgnztId; + /** 조직(부서)명 */ + private String orgnztNm; + /** 고유아이디 */ + private String uniqId; + /** 로그인 후 이동할 페이지 */ + private String url; + /** 사용자 IP정보 */ + private String ip; + /** GPKI인증 DN */ + private String dn; + /** + * id attribute 를 리턴한다. + * @return String + */ + public String getId() { + return id; + } + /** + * id attribute 값을 설정한다. + * @param id String + */ + public void setId(String id) { + this.id = id; + } + /** + * name attribute 를 리턴한다. + * @return String + */ + public String getName() { + return name; + } + /** + * name attribute 값을 설정한다. + * @param name String + */ + public void setName(String name) { + this.name = name; + } + /** + * ihidNum attribute 를 리턴한다. + * @return String + */ + public String getIhidNum() { + return ihidNum; + } + /** + * ihidNum attribute 값을 설정한다. + * @param ihidNum String + */ + public void setIhidNum(String ihidNum) { + this.ihidNum = ihidNum; + } + /** + * email attribute 를 리턴한다. + * @return String + */ + public String getEmail() { + return email; + } + /** + * email attribute 값을 설정한다. + * @param email String + */ + public void setEmail(String email) { + this.email = email; + } + /** + * 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; + } + /** + * @return the orgnztNm + */ + public String getOrgnztNm() { + return orgnztNm; + } + /** + * @param orgnztNm the orgnztNm to set + */ + public void setOrgnztNm(String orgnztNm) { + this.orgnztNm = orgnztNm; + } + +} diff --git a/src/main/java/egovframework/com/cmm/SessionVO.java b/src/main/java/egovframework/com/cmm/SessionVO.java new file mode 100644 index 0000000..b6fd62c --- /dev/null +++ b/src/main/java/egovframework/com/cmm/SessionVO.java @@ -0,0 +1,120 @@ +package egovframework.com.cmm; + +import java.io.Serializable; + +/** + * 세션 VO 클래스 + * @author 공통서비스 개발팀 박지욱 + * @since 2009.03.06 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + * 
    + *   수정일      수정자          수정내용
    + *  -------    --------    ---------------------------
    + *  2009.03.06  박지욱          최초 생성 
    + *  
    + *  
    + */ +@SuppressWarnings("serial") +public class SessionVO implements Serializable { + + /** 아이디 */ + private String sUserId; + /** 이름 */ + private String sUserNm; + /** 이메일 */ + private String sEmail; + /** 사용자구분 */ + private String sUserSe; + /** 조직(부서)ID */ + private String orgnztId; + /** 고유아이디 */ + private String uniqId; + /** + * sUserId attribute 를 리턴한다. + * @return String + */ + public String getSUserId() { + return sUserId; + } + /** + * sUserId attribute 값을 설정한다. + * @param sUserId String + */ + public void setSUserId(String userId) { + sUserId = userId; + } + /** + * sUserNm attribute 를 리턴한다. + * @return String + */ + public String getSUserNm() { + return sUserNm; + } + /** + * sUserNm attribute 값을 설정한다. + * @param sUserNm String + */ + public void setSUserNm(String userNm) { + sUserNm = userNm; + } + /** + * sEmail attribute 를 리턴한다. + * @return String + */ + public String getSEmail() { + return sEmail; + } + /** + * sEmail attribute 값을 설정한다. + * @param sEmail String + */ + public void setSEmail(String email) { + sEmail = email; + } + /** + * sUserSe attribute 를 리턴한다. + * @return String + */ + public String getSUserSe() { + return sUserSe; + } + /** + * sUserSe attribute 값을 설정한다. + * @param sUserSe String + */ + public void setSUserSe(String userSe) { + sUserSe = userSe; + } + /** + * orgnztId attribute 를 리턴한다. + * @return String + */ + public String getOrgnztId() { + return orgnztId; + } + /** + * orgnztId attribute 값을 설정한다. + * @param orgnztId String + */ + public void setOrgnztId(String orgnztId) { + this.orgnztId = orgnztId; + } + /** + * uniqId attribute 를 리턴한다. + * @return String + */ + public String getUniqId() { + return uniqId; + } + /** + * uniqId attribute 값을 설정한다. + * @param uniqId String + */ + public void setUniqId(String uniqId) { + this.uniqId = uniqId; + } +} diff --git a/src/main/java/egovframework/com/cmm/annotation/IncludedInfo.java b/src/main/java/egovframework/com/cmm/annotation/IncludedInfo.java new file mode 100644 index 0000000..a88f458 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/annotation/IncludedInfo.java @@ -0,0 +1,33 @@ +package egovframework.com.cmm.annotation; + +/** + * 컴포넌트의 포함 정보 표현을 위한 annotation 클래스 + * 기본적으로 Controller 클래스에 annotation을 부여하되, + * 하나의 Controller에 여러 개의 목록성 url mapping이 제공되는 경우에는 + * 메소드에 annotation을 부여한다. + * @author 공통컴포넌트 정진오 + * @since 2011.08.26 + * @version 2.0.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *   
    + *  수정일		수정자		수정내용
    + *  -------    	--------    ---------------------------
    + *  2011.08.26	정진오 		최초 생성
    + *
    + * 
    + */ + + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface IncludedInfo { + String name() default ""; // 컴포넌트의 한글 이름 + String listUrl() default ""; // 컴포넌트의 목록정보조회를 위한 URL + int order() default 0; // 자동 생성되는 메뉴 목록에 표시되는 순서 + int gid() default 0; // 컴포넌트의 Group ID(대분류 구분) +} diff --git a/src/main/java/egovframework/com/cmm/filter/HTMLTagFilter.java b/src/main/java/egovframework/com/cmm/filter/HTMLTagFilter.java new file mode 100644 index 0000000..551d57a --- /dev/null +++ b/src/main/java/egovframework/com/cmm/filter/HTMLTagFilter.java @@ -0,0 +1,46 @@ +/* + * Copyright 2008-2009 MOPAS(MINISTRY OF SECURITY AND PUBLIC ADMINISTRATION). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.com.cmm.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; + +public class HTMLTagFilter implements Filter{ + + @SuppressWarnings("unused") + private FilterConfig config; + + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + + chain.doFilter(new HTMLTagFilterRequestWrapper((HttpServletRequest)request), response); + } + + public void init(FilterConfig config) throws ServletException { + this.config = config; + } + + public void destroy() { + + } +} diff --git a/src/main/java/egovframework/com/cmm/filter/HTMLTagFilterRequestWrapper.java b/src/main/java/egovframework/com/cmm/filter/HTMLTagFilterRequestWrapper.java new file mode 100644 index 0000000..c070001 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/filter/HTMLTagFilterRequestWrapper.java @@ -0,0 +1,109 @@ +/* + * Copyright 2008-2009 MOPAS(MINISTRY OF SECURITY AND PUBLIC ADMINISTRATION). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.com.cmm.filter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +public class HTMLTagFilterRequestWrapper extends HttpServletRequestWrapper { + + public HTMLTagFilterRequestWrapper(HttpServletRequest request) { + super(request); + } + + public String[] getParameterValues(String parameter) { + + String[] values = super.getParameterValues(parameter); + + if(values==null){ + return null; + } + + for (int i = 0; i < values.length; i++) { + if (values[i] != null) { + StringBuffer strBuff = new StringBuffer(); + for (int j = 0; j < values[i].length(); j++) { + char c = values[i].charAt(j); + switch (c) { + case '<': + strBuff.append("<"); + break; + case '>': + strBuff.append(">"); + break; + //case '&': + //strBuff.append("&"); + //break; + case '"': + strBuff.append("""); + break; + case '\'': + strBuff.append("'"); + break; + default: + strBuff.append(c); + break; + } + } + values[i] = strBuff.toString(); + } else { + values[i] = null; + } + } + + return values; + } + + public String getParameter(String parameter) { + + String value = super.getParameter(parameter); + + if(value==null){ + return null; + } + + StringBuffer strBuff = new StringBuffer(); + + for (int i = 0; i < value.length(); i++) { + char c = value.charAt(i); + switch (c) { + case '<': + strBuff.append("<"); + break; + case '>': + strBuff.append(">"); + break; + case '&': + strBuff.append("&"); + break; + case '"': + strBuff.append("""); + break; + case '\'': + strBuff.append("'"); + break; + default: + strBuff.append(c); + break; + } + } + + value = strBuff.toString(); + + return value; + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java b/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java new file mode 100644 index 0000000..118e4a9 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java @@ -0,0 +1,54 @@ +package egovframework.com.cmm.interceptor; + +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.util.EgovUserDetailsHelper; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.ModelAndViewDefiningException; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +/** + * 인증여부 체크 인터셉터 + * @author 공통서비스 개발팀 서준식 + * @since 2011.07.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자          수정내용
    + *  -------    --------    ---------------------------
    + *  2011.07.01  서준식          최초 생성
    + *  2011.09.07  서준식          인증이 필요없는 URL을 패스하는 로직 추가
    + *  
    + */ + + +public class AuthenticInterceptor extends HandlerInterceptorAdapter { + + /** + * 세션에 계정정보(LoginVO)가 있는지 여부로 인증 여부를 체크한다. + * 계정정보(LoginVO)가 없다면, 로그인 페이지로 이동한다. + */ + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + + boolean isPermittedURL = false; + + LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + + if(loginVO != null){ + return true; + } else if(!isPermittedURL){ + ModelAndView modelAndView = new ModelAndView("redirect:/uat/uia/egovLoginUsr.do"); + throw new ModelAndViewDefiningException(modelAndView); + }else{ + return true; + } + } + +} diff --git a/src/main/java/egovframework/com/cmm/interceptor/IpObtainInterceptor.java b/src/main/java/egovframework/com/cmm/interceptor/IpObtainInterceptor.java new file mode 100644 index 0000000..f4b89a4 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/interceptor/IpObtainInterceptor.java @@ -0,0 +1,42 @@ +package egovframework.com.cmm.interceptor; + +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.util.EgovUserDetailsHelper; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +/** + * 사용자IP 체크 인터셉터 + * @author 유지보수팀 이기하 + * @since 2013.03.28 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + * 
    + *   수정일     수정자          수정내용
    + *  ----------  --------    ---------------------------
    + *  2013.03.28	이기하          최초 생성 
    + *  
    + */ + +public class IpObtainInterceptor extends HandlerInterceptorAdapter { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + + String clientIp = request.getRemoteAddr(); + + LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + + if (loginVO != null) { + loginVO.setIp(clientIp); + } + + return true; + } +} diff --git a/src/main/java/egovframework/com/cmm/service/CmmnDetailCode.java b/src/main/java/egovframework/com/cmm/service/CmmnDetailCode.java new file mode 100644 index 0000000..eb97c05 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/CmmnDetailCode.java @@ -0,0 +1,194 @@ +package egovframework.com.cmm.service; + +import java.io.Serializable; + +/** + * 공통상세코드 모델 클래스 + * @author 공통서비스 개발팀 이중호 + * @since 2009.04.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.04.01  이중호          최초 생성
    + *
    + * 
    + */ +public class CmmnDetailCode implements Serializable { + + private static final long serialVersionUID = 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/egovframework/com/cmm/service/EgovCmmUseService.java b/src/main/java/egovframework/com/cmm/service/EgovCmmUseService.java new file mode 100644 index 0000000..54a0d03 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/EgovCmmUseService.java @@ -0,0 +1,64 @@ +package egovframework.com.cmm.service; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultCodeVO; + + + +/** + * + * 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기 위한 서비스 인터페이스 + * @author 공통서비스 개발팀 이삼섭 + * @since 2009.04.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.11  이삼섭          최초 생성
    + *
    + * 
    + */ +public interface EgovCmmUseService { + + /** + * 공통코드를 조회한다. + * + * @param vo + * @return List(코드) + * @throws Exception + */ + public List selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception; + + /** + * ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다. + * + * @param voList + * @return Map(코드) + * @throws Exception + */ + public Map> selectCmmCodeDetails(List voList) throws Exception; + + /** + * 조직정보를 코드형태로 리턴한다. + * + * @param 조회조건정보 vo + * @return 조직정보 List + * @throws Exception + */ + public List selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception; + + /** + * 그룹정보를 코드형태로 리턴한다. + * + * @param 조회조건정보 vo + * @return 그룹정보 List + * @throws Exception + */ + public List selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception; +} diff --git a/src/main/java/egovframework/com/cmm/service/EgovFileMngService.java b/src/main/java/egovframework/com/cmm/service/EgovFileMngService.java new file mode 100644 index 0000000..677c16b --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/EgovFileMngService.java @@ -0,0 +1,115 @@ +package egovframework.com.cmm.service; + +import java.util.List; +import java.util.Map; + +/** + * @Class Name : EgovFileMngService.java + * @Description : 파일정보의 관리를 위한 서비스 인터페이스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 25. 이삼섭 최초생성 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 25. + * @version + * @see + * + */ +public interface EgovFileMngService { + + /** + * 파일에 대한 목록을 조회한다. + * + * @param fvo + * @return + * @throws Exception + */ + public List selectFileInfs(FileVO fvo) throws Exception; + + /** + * 하나의 파일에 대한 정보(속성 및 상세)를 등록한다. + * + * @param fvo + * @throws Exception + */ + public String insertFileInf(FileVO fvo) throws Exception; + + /** + * 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다. + * + * @param fvoList + * @throws Exception + */ + public String insertFileInfs(List fvoList) throws Exception; + + /** + * 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다. + * + * @param fvoList + * @throws Exception + */ + public void updateFileInfs(List fvoList) throws Exception; + + /** + * 여러 개의 파일을 삭제한다. + * + * @param fvoList + * @throws Exception + */ + public void deleteFileInfs(List fvoList) throws Exception; + + /** + * 하나의 파일을 삭제한다. + * + * @param fvo + * @throws Exception + */ + public void deleteFileInf(FileVO fvo) throws Exception; + + /** + * 파일에 대한 상세정보를 조회한다. + * + * @param fvo + * @return + * @throws Exception + */ + public FileVO selectFileInf(FileVO fvo) throws Exception; + + /** + * 파일 구분자에 대한 최대값을 구한다. + * + * @param fvo + * @return + * @throws Exception + */ + public int getMaxFileSN(FileVO fvo) throws Exception; + + /** + * 전체 파일을 삭제한다. + * + * @param fvo + * @throws Exception + */ + public void deleteAllFileInf(FileVO fvo) throws Exception; + + /** + * 파일명 검색에 대한 목록을 조회한다. + * + * @param fvo + * @return + * @throws Exception + */ + public Map selectFileListByFileNm(FileVO fvo) throws Exception; + + /** + * 이미지 파일에 대한 목록을 조회한다. + * + * @param vo + * @return + * @throws Exception + */ + public List selectImageFileList(FileVO vo) throws Exception; +} diff --git a/src/main/java/egovframework/com/cmm/service/EgovFileMngUtil.java b/src/main/java/egovframework/com/cmm/service/EgovFileMngUtil.java new file mode 100644 index 0000000..eaeebbe --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/EgovFileMngUtil.java @@ -0,0 +1,421 @@ +package egovframework.com.cmm.service; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; + +import egovframework.com.cmm.EgovWebUtil; +import egovframework.com.cmm.util.EgovResourceCloseHelper; + +import egovframework.rte.fdl.idgnr.EgovIdGnrService; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Component; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.multipart.MultipartFile; + +/** + * @Class Name : EgovFileMngUtil.java + * @Description : 메시지 처리 관련 유틸리티 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.02.13 이삼섭 최초 생성 + * 2011.08.09 서준식 utl.fcc패키지와 Dependency제거를 위해 getTimeStamp()메서드 추가 + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 02. 13 + * @version 1.0 + * @see + * + */ +@Component("EgovFileMngUtil") +public class EgovFileMngUtil { + + public static final int BUFF_SIZE = 2048; + + @Resource(name = "egovFileIdGnrService") + private EgovIdGnrService idgenService; + + /** + * 첨부파일에 대한 목록 정보를 취득한다. + * + * @param files + * @return + * @throws Exception + */ + public List parseFileInf(Map files, String KeyStr, int fileKeyParam, String atchFileId, String storePath) throws Exception { + int fileKey = fileKeyParam; + + String storePathString = ""; + String atchFileIdString = ""; + + if ("".equals(storePath) || storePath == null) { + storePathString = EgovProperties.getProperty("Globals.fileStorePath"); + } else { + storePathString = EgovProperties.getProperty(storePath); + } + + if ("".equals(atchFileId) || atchFileId == null) { + atchFileIdString = idgenService.getNextStringId(); + } else { + atchFileIdString = atchFileId; + } + + File saveFolder = new File(EgovWebUtil.filePathBlackList(storePathString)); + + if (!saveFolder.exists() || saveFolder.isFile()) { + saveFolder.mkdirs(); + } + + Iterator> itr = files.entrySet().iterator(); + MultipartFile file; + String filePath = ""; + List result = new ArrayList(); + FileVO fvo; + + while (itr.hasNext()) { + Entry entry = itr.next(); + + file = entry.getValue(); + String orginFileName = file.getOriginalFilename(); + + //-------------------------------------- + // 원 파일명이 없는 경우 처리 + // (첨부가 되지 않은 input file type) + //-------------------------------------- + if ("".equals(orginFileName)) { + continue; + } + ////------------------------------------ + + int index = orginFileName.lastIndexOf("."); + //String fileName = orginFileName.substring(0, index); + String fileExt = orginFileName.substring(index + 1); + String newName = KeyStr + getTimeStamp() + fileKey; + long size = file.getSize(); + + if (!"".equals(orginFileName)) { + filePath = storePathString + File.separator + newName; + file.transferTo(new File(EgovWebUtil.filePathBlackList(filePath))); + } + + fvo = new FileVO(); + fvo.setFileExtsn(fileExt); + fvo.setFileStreCours(storePathString); + fvo.setFileMg(Long.toString(size)); + fvo.setOrignlFileNm(orginFileName); + fvo.setStreFileNm(newName); + fvo.setAtchFileId(atchFileIdString); + fvo.setFileSn(String.valueOf(fileKey)); + + result.add(fvo); + + fileKey++; + } + + return result; + } + + /** + * 첨부파일을 서버에 저장한다. + * + * @param file + * @param newName + * @param stordFilePath + * @throws Exception + */ + protected void writeUploadedFile(MultipartFile file, String newName, String stordFilePath) throws Exception { + InputStream stream = null; + OutputStream bos = null; + + try { + stream = file.getInputStream(); + File cFile = new File(stordFilePath); + + if (!cFile.isDirectory()) { + boolean _flag = cFile.mkdir(); + if (!_flag) { + throw new IOException("Directory creation Failed "); + } + } + + bos = new FileOutputStream(stordFilePath + File.separator + newName); + + int bytesRead = 0; + byte[] buffer = new byte[BUFF_SIZE]; + + while ((bytesRead = stream.read(buffer, 0, BUFF_SIZE)) != -1) { + bos.write(buffer, 0, bytesRead); + } + } finally { + EgovResourceCloseHelper.close(bos, stream); + } + } + + /** + * 서버의 파일을 다운로드한다. + * + * @param request + * @param response + * @throws Exception + */ + public static void downFile(HttpServletRequest request, HttpServletResponse response) throws Exception { + + String downFileName = ""; + String orgFileName = ""; + + if ((String) request.getAttribute("downFile") == null) { + downFileName = ""; + } else { + downFileName = (String) request.getAttribute("downFile"); + } + + if ((String) request.getAttribute("orgFileName") == null) { + orgFileName = ""; + } else { + orgFileName = (String) request.getAttribute("orginFile"); + } + + orgFileName = orgFileName.replaceAll("\r", "").replaceAll("\n", ""); + + File file = new File(EgovWebUtil.filePathBlackList(downFileName)); + + if (!file.exists()) { + throw new FileNotFoundException(downFileName); + } + + if (!file.isFile()) { + throw new FileNotFoundException(downFileName); + } + + byte[] buffer = new byte[BUFF_SIZE]; //buffer size 2K. + + response.setContentType("application/x-msdownload"); + response.setHeader("Content-Disposition:", "attachment; filename=" + new String(orgFileName.getBytes(), "UTF-8")); + response.setHeader("Content-Transfer-Encoding", "binary"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Expires", "0"); + + BufferedInputStream fin = null; + BufferedOutputStream outs = null; + + try { + fin = new BufferedInputStream(new FileInputStream(file)); + outs = new BufferedOutputStream(response.getOutputStream()); + int read = 0; + + while ((read = fin.read(buffer)) != -1) { + outs.write(buffer, 0, read); + } + } finally { + EgovResourceCloseHelper.close(outs, fin); + } + } + + /** + * 첨부로 등록된 파일을 서버에 업로드한다. + * + * @param file + * @return + * @throws Exception + */ + public static HashMap uploadFile(MultipartFile file) throws Exception { + + HashMap map = new HashMap(); + //Write File 이후 Move File???? + String newName = ""; + String stordFilePath = EgovProperties.getProperty("Globals.fileStorePath"); + String orginFileName = file.getOriginalFilename(); + + int index = orginFileName.lastIndexOf("."); + //String fileName = orginFileName.substring(0, _index); + String fileExt = orginFileName.substring(index + 1); + long size = file.getSize(); + + //newName 은 Naming Convention에 의해서 생성 + newName = getTimeStamp(); // 2012.11 KISA 보안조치 + writeFile(file, newName, stordFilePath); + //storedFilePath는 지정 + map.put(Globals.ORIGIN_FILE_NM, orginFileName); + map.put(Globals.UPLOAD_FILE_NM, newName); + map.put(Globals.FILE_EXT, fileExt); + map.put(Globals.FILE_PATH, stordFilePath); + map.put(Globals.FILE_SIZE, String.valueOf(size)); + + return map; + } + + /** + * 파일을 실제 물리적인 경로에 생성한다. + * + * @param file + * @param newName + * @param stordFilePath + * @throws Exception + */ + protected static void writeFile(MultipartFile file, String newName, String stordFilePath) throws Exception { + InputStream stream = null; + OutputStream bos = null; + + try { + stream = file.getInputStream(); + File cFile = new File(EgovWebUtil.filePathBlackList(stordFilePath)); + + if (!cFile.isDirectory()) + cFile.mkdir(); + + bos = new FileOutputStream(EgovWebUtil.filePathBlackList(stordFilePath + File.separator + newName)); + + int bytesRead = 0; + byte[] buffer = new byte[BUFF_SIZE]; + + while ((bytesRead = stream.read(buffer, 0, BUFF_SIZE)) != -1) { + bos.write(buffer, 0, bytesRead); + } + } finally { + EgovResourceCloseHelper.close(bos, stream); + } + } + + /** + * 서버 파일에 대하여 다운로드를 처리한다. + * + * @param response + * @param streFileNm 파일저장 경로가 포함된 형태 + * @param orignFileNm + * @throws Exception + */ + public void downFile(HttpServletResponse response, String streFileNm, String orignFileNm) throws Exception { + String downFileName = streFileNm; + String orgFileName = orignFileNm; + + File file = new File(downFileName); + + if (!file.exists()) { + throw new FileNotFoundException(downFileName); + } + + if (!file.isFile()) { + throw new FileNotFoundException(downFileName); + } + + int fSize = (int) file.length(); + if (fSize > 0) { + BufferedInputStream in = null; + + try { + in = new BufferedInputStream(new FileInputStream(file)); + + String mimetype = "application/x-msdownload"; + + //response.setBufferSize(fSize); + response.setContentType(mimetype); + response.setHeader("Content-Disposition:", "attachment; filename=" + orgFileName); + response.setContentLength(fSize); + //response.setHeader("Content-Transfer-Encoding","binary"); + //response.setHeader("Pragma","no-cache"); + //response.setHeader("Expires","0"); + FileCopyUtils.copy(in, response.getOutputStream()); + } finally { + EgovResourceCloseHelper.close(in); + } + response.getOutputStream().flush(); + response.getOutputStream().close(); + } + + /* + String uploadPath = propertiesService.getString("fileDir"); + + File uFile = new File(uploadPath, requestedFile); + int fSize = (int) uFile.length(); + + if (fSize > 0) { + BufferedInputStream in = new BufferedInputStream(new FileInputStream(uFile)); + + String mimetype = "text/html"; + + //response.setBufferSize(fSize); + response.setContentType(mimetype); + response.setHeader("Content-Disposition", "attachment; filename=\"" + requestedFile + "\""); + response.setContentLength(fSize); + + FileCopyUtils.copy(in, response.getOutputStream()); + in.close(); + response.getOutputStream().flush(); + response.getOutputStream().close(); + } else { + response.setContentType("text/html"); + PrintWriter printwriter = response.getWriter(); + printwriter.println(""); + printwriter.println("


    Could not get file name:
    " + requestedFile + "

    "); + printwriter.println("


    Back

    "); + printwriter.println("


    © webAccess"); + printwriter.println(""); + printwriter.flush(); + printwriter.close(); + } + //*/ + + /* + response.setContentType("application/x-msdownload"); + response.setHeader("Content-Disposition:", "attachment; filename=" + new String(orgFileName.getBytes(),"UTF-8" )); + response.setHeader("Content-Transfer-Encoding","binary"); + response.setHeader("Pragma","no-cache"); + response.setHeader("Expires","0"); + + BufferedInputStream fin = new BufferedInputStream(new FileInputStream(file)); + BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream()); + int read = 0; + + while ((read = fin.read(b)) != -1) { + outs.write(b,0,read); + } + log.debug(this.getClass().getName()+" BufferedOutputStream Write Complete!!! "); + + outs.close(); + fin.close(); + //*/ + } + + /** + * 공통 컴포넌트 utl.fcc 패키지와 Dependency제거를 위해 내부 메서드로 추가 정의함 + * 응용어플리케이션에서 고유값을 사용하기 위해 시스템에서17자리의TIMESTAMP값을 구하는 기능 + * + * @param + * @return Timestamp 값 + * @see + */ + private 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; + } +} diff --git a/src/main/java/egovframework/com/cmm/service/EgovProperties.java b/src/main/java/egovframework/com/cmm/service/EgovProperties.java new file mode 100644 index 0000000..7207f1d --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/EgovProperties.java @@ -0,0 +1,220 @@ +package egovframework.com.cmm.service; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import egovframework.com.cmm.EgovWebUtil; +import egovframework.com.cmm.util.EgovResourceCloseHelper; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Class Name : EgovProperties.java + * Description : properties값들을 파일로부터 읽어와 Globals클래스의 정적변수로 로드시켜주는 클래스로 + * 문자열 정보 기준으로 사용할 전역변수를 시스템 재시작으로 반영할 수 있도록 한다. + * Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.01.19 박지욱 최초 생성 + * 2011.07.20 서준식 Globals파일의 상대경로를 읽은 메서드 추가 + * 2014.10.13 이기하 Globals.properties 값이 null일 경우 오류처리 + * @author 공통 서비스 개발팀 박지욱 + * @since 2009. 01. 19 + * @version 1.0 + * @see + * + */ + +public class EgovProperties { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovProperties.class); + + //파일구분자 + final static String FILE_SEPARATOR = System.getProperty("file.separator"); + + //프로퍼티 파일의 물리적 위치 + //public static final String GLOBALS_PROPERTIES_FILE = System.getProperty("user.home") + FILE_SEPARATOR + "egovProps" +FILE_SEPARATOR + "globals.properties"; + + //public static final String RELATIVE_PATH_PREFIX = EgovProperties.class.getResource("").getPath() + FILE_SEPARATOR+ ".." + FILE_SEPARATOR + ".." + FILE_SEPARATOR; + + public static final String RELATIVE_PATH_PREFIX = EgovProperties.class.getResource("").getPath().substring(0, EgovProperties.class.getResource("").getPath().lastIndexOf("com")); + + public static final String GLOBALS_PROPERTIES_FILE = RELATIVE_PATH_PREFIX + "egovProps" + FILE_SEPARATOR + "globals.properties"; + + /** + * 인자로 주어진 문자열을 Key값으로 하는 상대경로 프로퍼티 값을 절대경로로 반환한다(Globals.java 전용) + * @param keyName String + * @return String + */ + public static String getPathProperty(String keyName) { + String value = ""; + +// LOGGER.debug("getPathProperty : {} = {}", GLOBALS_PROPERTIES_FILE, keyName); + + FileInputStream fis = null; + try { + Properties props = new Properties(); + + fis = new FileInputStream(EgovWebUtil.filePathBlackList(GLOBALS_PROPERTIES_FILE)); + props.load(new BufferedInputStream(fis)); + + value = props.getProperty(keyName).trim(); + value = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + value; + } catch (FileNotFoundException fne) { + LOGGER.debug("Property file not found.", fne); + throw new RuntimeException("Property file not found", fne); + } catch (IOException ioe) { + LOGGER.debug("Property file IO exception", ioe); + throw new RuntimeException("Property file IO exception", ioe); + } finally { + EgovResourceCloseHelper.close(fis); + } + + return value; + } + + /** + * 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다(Globals.java 전용) + * @param keyName String + * @return String + */ + public static String getProperty(String keyName) { + String value = ""; + +// LOGGER.debug("getProperty : {} = {}", GLOBALS_PROPERTIES_FILE, keyName); + + FileInputStream fis = null; + try { + Properties props = new Properties(); + + fis = new FileInputStream(EgovWebUtil.filePathBlackList(GLOBALS_PROPERTIES_FILE)); + + props.load(new BufferedInputStream(fis)); + if (props.getProperty(keyName) == null) { + return ""; + } + value = props.getProperty(keyName).trim(); + } catch (FileNotFoundException fne) { + LOGGER.debug("Property file not found.", fne); + throw new RuntimeException("Property file not found", fne); + } catch (IOException ioe) { + LOGGER.debug("Property file IO exception", ioe); + throw new RuntimeException("Property file IO exception", ioe); + } finally { + EgovResourceCloseHelper.close(fis); + } + + return value; + } + + /** + * 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 상대 경로값을 절대 경로값으로 반환한다 + * @param fileName String + * @param key String + * @return String + */ + public static String getPathProperty(String fileName, String key) { + FileInputStream fis = null; + try { + Properties props = new Properties(); + + fis = new FileInputStream(EgovWebUtil.filePathBlackList(fileName)); + props.load(new BufferedInputStream(fis)); + fis.close(); + + String value = props.getProperty(key); + value = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + value; + + return value; + } catch (FileNotFoundException fne) { + LOGGER.debug("Property file not found.", fne); + throw new RuntimeException("Property file not found", fne); + } catch (IOException ioe) { + LOGGER.debug("Property file IO exception", ioe); + throw new RuntimeException("Property file IO exception", ioe); + } finally { + EgovResourceCloseHelper.close(fis); + } + } + + /** + * 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다 + * @param fileName String + * @param key String + * @return String + */ + public static String getProperty(String fileName, String key) { + FileInputStream fis = null; + try { + Properties props = new Properties(); + + fis = new FileInputStream(EgovWebUtil.filePathBlackList(fileName)); + props.load(new BufferedInputStream(fis)); + fis.close(); + + String value = props.getProperty(key); + + return value; + } catch (FileNotFoundException fne) { + LOGGER.debug("Property file not found.", fne); + throw new RuntimeException("Property file not found", fne); + } catch (IOException ioe) { + LOGGER.debug("Property file IO exception", ioe); + throw new RuntimeException("Property file IO exception", ioe); + } finally { + EgovResourceCloseHelper.close(fis); + } + } + + /** + * 주어진 프로파일의 내용을 파싱하여 (key-value) 형태의 구조체 배열을 반환한다. + * @param property String + * @return ArrayList + */ + public static ArrayList> loadPropertyFile(String property) { + + // key - value 형태로 된 배열 결과 + ArrayList> keyList = new ArrayList>(); + + String src = property.replace('\\', File.separatorChar).replace('/', File.separatorChar); + FileInputStream fis = null; + try { + + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + if (srcFile.exists()) { + + Properties props = new Properties(); + fis = new FileInputStream(src); + props.load(new BufferedInputStream(fis)); + fis.close(); + + 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 (IOException ex) { + LOGGER.debug("IO Exception", ex); + throw new RuntimeException(ex); + } finally { + EgovResourceCloseHelper.close(fis); + } + + return keyList; + } +} diff --git a/src/main/java/egovframework/com/cmm/service/EgovUserDetailsService.java b/src/main/java/egovframework/com/cmm/service/EgovUserDetailsService.java new file mode 100644 index 0000000..796f5ef --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/EgovUserDetailsService.java @@ -0,0 +1,26 @@ +package egovframework.com.cmm.service; + +import java.util.List; + +public interface EgovUserDetailsService { + + /** + * 인증된 사용자객체를 VO형식으로 가져온다. + * @return Object - 사용자 ValueObject + */ + public Object getAuthenticatedUser(); + + /** + * 인증된 사용자의 권한 정보를 가져온다. + * 예) [ROLE_ADMIN, ROLE_USER, ROLE_A, ROLE_B, ROLE_RESTRICTED, IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED_ANONYMOUSLY] + * @return List - 사용자 권한정보 목록 + */ + public List getAuthorities(); + + /** + * 인증된 사용자 여부를 체크한다. + * @return Boolean - 인증된 사용자 여부(TRUE / FALSE) + */ + public Boolean isAuthenticated(); + +} diff --git a/src/main/java/egovframework/com/cmm/service/FileVO.java b/src/main/java/egovframework/com/cmm/service/FileVO.java new file mode 100644 index 0000000..6f5e0f3 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/FileVO.java @@ -0,0 +1,240 @@ +package egovframework.com.cmm.service; + +import java.io.Serializable; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +/** + * @Class Name : FileVO.java + * @Description : 파일정보 처리를 위한 VO 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 25. 이삼섭 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 25. + * @version + * @see + * + */ +@SuppressWarnings("serial") +public class FileVO implements Serializable { + + /** + * 첨부파일 아이디 + */ + public String atchFileId = ""; + /** + * 생성일자 + */ + public String creatDt = ""; + /** + * 파일내용 + */ + public String fileCn = ""; + /** + * 파일확장자 + */ + public String fileExtsn = ""; + /** + * 파일크기 + */ + public String fileMg = ""; + /** + * 파일연번 + */ + public String fileSn = ""; + /** + * 파일저장경로 + */ + public String fileStreCours = ""; + /** + * 원파일명 + */ + public String orignlFileNm = ""; + /** + * 저장파일명 + */ + public String streFileNm = ""; + + /** + * atchFileId attribute를 리턴한다. + * + * @return the atchFileId + */ + public String getAtchFileId() { + return atchFileId; + } + + /** + * atchFileId attribute 값을 설정한다. + * + * @param atchFileId + * the atchFileId to set + */ + public void setAtchFileId(String atchFileId) { + this.atchFileId = atchFileId; + } + + /** + * creatDt attribute를 리턴한다. + * + * @return the creatDt + */ + public String getCreatDt() { + return creatDt; + } + + /** + * creatDt attribute 값을 설정한다. + * + * @param creatDt + * the creatDt to set + */ + public void setCreatDt(String creatDt) { + this.creatDt = creatDt; + } + + /** + * fileCn attribute를 리턴한다. + * + * @return the fileCn + */ + public String getFileCn() { + return fileCn; + } + + /** + * fileCn attribute 값을 설정한다. + * + * @param fileCn + * the fileCn to set + */ + public void setFileCn(String fileCn) { + this.fileCn = fileCn; + } + + /** + * fileExtsn attribute를 리턴한다. + * + * @return the fileExtsn + */ + public String getFileExtsn() { + return fileExtsn; + } + + /** + * fileExtsn attribute 값을 설정한다. + * + * @param fileExtsn + * the fileExtsn to set + */ + public void setFileExtsn(String fileExtsn) { + this.fileExtsn = fileExtsn; + } + + /** + * fileMg attribute를 리턴한다. + * + * @return the fileMg + */ + public String getFileMg() { + return fileMg; + } + + /** + * fileMg attribute 값을 설정한다. + * + * @param fileMg + * the fileMg to set + */ + public void setFileMg(String fileMg) { + this.fileMg = fileMg; + } + + /** + * fileSn attribute를 리턴한다. + * + * @return the fileSn + */ + public String getFileSn() { + return fileSn; + } + + /** + * fileSn attribute 값을 설정한다. + * + * @param fileSn + * the fileSn to set + */ + public void setFileSn(String fileSn) { + this.fileSn = fileSn; + } + + /** + * fileStreCours attribute를 리턴한다. + * + * @return the fileStreCours + */ + public String getFileStreCours() { + return fileStreCours; + } + + /** + * fileStreCours attribute 값을 설정한다. + * + * @param fileStreCours + * the fileStreCours to set + */ + public void setFileStreCours(String fileStreCours) { + this.fileStreCours = fileStreCours; + } + + /** + * orignlFileNm attribute를 리턴한다. + * + * @return the orignlFileNm + */ + public String getOrignlFileNm() { + return orignlFileNm; + } + + /** + * orignlFileNm attribute 값을 설정한다. + * + * @param orignlFileNm + * the orignlFileNm to set + */ + public void setOrignlFileNm(String orignlFileNm) { + this.orignlFileNm = orignlFileNm; + } + + /** + * streFileNm attribute를 리턴한다. + * + * @return the streFileNm + */ + public String getStreFileNm() { + return streFileNm; + } + + /** + * streFileNm attribute 값을 설정한다. + * + * @param streFileNm + * the streFileNm to set + */ + public void setStreFileNm(String streFileNm) { + this.streFileNm = streFileNm; + } + + /** + * toString 메소드를 대치한다. + */ + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + +} diff --git a/src/main/java/egovframework/com/cmm/service/Globals.java b/src/main/java/egovframework/com/cmm/service/Globals.java new file mode 100644 index 0000000..b30a0d2 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/Globals.java @@ -0,0 +1,93 @@ +package egovframework.com.cmm.service; + +/** + * Class Name : Globals.java + * Description : 시스템 구동 시 프로퍼티를 통해 사용될 전역변수를 정의한다. + * Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2019.05.xx 윤상근 최초 생성 + * + */ + +public class Globals { + //OS 유형 + public static final String OS_TYPE = EgovProperties.getProperty("Globals.OsType"); + //DB 유형 + public static final String DB_TYPE = EgovProperties.getProperty("Globals.DbType"); + //메인 페이지 + public static final String MAIN_PAGE = EgovProperties.getProperty("Globals.MainPage"); + //ShellFile 경로 + public static final String SHELL_FILE_PATH = EgovProperties.getPathProperty("Globals.ShellFilePath"); + //퍼로퍼티 파일 위치 + public static final String CONF_PATH = EgovProperties.getPathProperty("Globals.ConfPath"); + //Server정보 프로퍼티 위치 + public static final String SERVER_CONF_PATH = EgovProperties.getPathProperty("Globals.ServerConfPath"); + //Client정보 프로퍼티 위치 + public static final String CLIENT_CONF_PATH = EgovProperties.getPathProperty("Globals.ClientConfPath"); + //파일포맷 정보 프로퍼티 위치 + public static final String FILE_FORMAT_PATH = EgovProperties.getPathProperty("Globals.FileFormatPath"); + + //파일 업로드 원 파일명 + public static final String ORIGIN_FILE_NM = "originalFileName"; + //파일 확장자 + public static final String FILE_EXT = "fileExtension"; + //파일크기 + public static final String FILE_SIZE = "fileSize"; + //업로드된 파일명 + public static final String UPLOAD_FILE_NM = "uploadFileName"; + //파일경로 + public static final String FILE_PATH = "filePath"; + + //메일발송요청 XML파일경로 + public static final String MAIL_REQUEST_PATH = EgovProperties.getPathProperty("Globals.MailRequestPath"); + //메일발송응답 XML파일경로 + public static final String MAIL_RESPONSE_PATH = EgovProperties.getPathProperty("Globals.MailRResponsePath"); + + // G4C 연결용 IP (localhost) + public static final String LOCAL_IP = EgovProperties.getProperty("Globals.LocalIp"); + + //연계서버 사용 구분(Y/N) + public static final String LINK_ON = EgovProperties.getProperty("Link.LinkOn"); + //타이머 사용 구분(Y/N) + public static final String TIME_ON = EgovProperties.getProperty("Link.TimeOn"); + //타임 구분(1.시간, 2.분, 3.초) + public static final String TIME_DIV = EgovProperties.getProperty("Link.TimeDiv"); + //딜레이 타임 + public static final String TIMEINTERVAL = EgovProperties.getProperty("Link.TimeInterval"); + public static final long TIME_INTERVAL = Integer.parseInt(TIMEINTERVAL); + + // 푸시서버 사용 구분(Y/N) + public static final String PUSH_ON = EgovProperties.getProperty("Push.PushOn"); + // 푸시서버 타이머 사용 구분(Y/N) + public static final String PUSH_TIME_ON = EgovProperties.getProperty("Push.TimeOn"); + // 푸시서버 타임 구분(1.시간, 2.분, 3.초) + public static final String PUSH_TIME_DIV = EgovProperties.getProperty("Push.TimeDiv"); + // 푸시서버 딜레이 타임 + public static final String PUSHTIMEINTERVAL = EgovProperties.getProperty("Push.TimeInterval"); + public static final long PUSH_TIME_INTERVAL = Integer.parseInt(PUSHTIMEINTERVAL); + + //과태료관리 시스템 sftp 디렉토리 + public static final String topisSftpServerIp = EgovProperties.getProperty("Topis.sftp.server.ip"); + public static final String topisSftpIntPort = EgovProperties.getProperty("Topis.sftp.server.port"); + public static final int topisSftpServerPort = Integer.parseInt(topisSftpIntPort); + public static final String topisSftpUserId = EgovProperties.getProperty("Topis.sftp.user.id"); + public static final String topisSftpUserPw = EgovProperties.getProperty("Topis.sftp.user.pw"); + public static final String topisSftpRecvPath = EgovProperties.getProperty("Topis.sftp.recvPath"); + public static final String topisSftpSendPath = EgovProperties.getProperty("Topis.sftp.sendPath"); + + //과태료관리 시스템 정보 연계 디렉토리 + public static final String topisLocaRecvPath = EgovProperties.getProperty("Topis.loca.recvPath"); + public static final String topisRecvErrPath = EgovProperties.getProperty("Topis.recv.errPath"); + public static final String topisRecvSuccPath = EgovProperties.getProperty("Topis.recv.succPath"); + + public static final String topisLocaSendPath = EgovProperties.getProperty("Topis.loca.sendPath"); + public static final String topisSendErrPath = EgovProperties.getProperty("Topis.send.errPath"); + public static final String topisSendSuccPath = EgovProperties.getProperty("Topis.send.succPath"); + + //과태료관리 시스템 정보 Image 연계 디렉토리 + public static final String topisImgSendPath = EgovProperties.getProperty("Topis.img.sendPath"); + public static final String topisImgErrPath = EgovProperties.getProperty("Topis.img.errPath"); + public static final String topisImgSuccPath = EgovProperties.getProperty("Topis.img.succPath"); +} diff --git a/src/main/java/egovframework/com/cmm/service/IpCountryService.java b/src/main/java/egovframework/com/cmm/service/IpCountryService.java new file mode 100644 index 0000000..9f4cc1e --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/IpCountryService.java @@ -0,0 +1,20 @@ +package egovframework.com.cmm.service; + +/** + * @파일명 : IpCountryService.java + * @파일정보 : 아이피 국가정보 조회 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +public interface IpCountryService { + + IpCountryVO getCountryNameAndCode(String ip); + +} diff --git a/src/main/java/egovframework/com/cmm/service/IpCountryVO.java b/src/main/java/egovframework/com/cmm/service/IpCountryVO.java new file mode 100644 index 0000000..4f796d4 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/IpCountryVO.java @@ -0,0 +1,27 @@ +package egovframework.com.cmm.service; + +import java.io.Serializable; + +public class IpCountryVO implements Serializable { + + private static final long serialVersionUID = 4272890967100979951L; + + private String countryCode; + private String countryName; + + public String getCountryCode() { + return countryCode; + } + + public void setCountryCode(String countryCode) { + this.countryCode = countryCode; + } + + public String getCountryName() { + return countryName; + } + + public void setCountryName(String countryName) { + this.countryName = countryName; + } +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java b/src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java new file mode 100644 index 0000000..62a284c --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java @@ -0,0 +1,62 @@ +package egovframework.com.cmm.service.impl; + +import java.util.List; + +import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.service.CmmnDetailCode; + +import org.springframework.stereotype.Repository; + +/** + * @Class Name : CmmUseDAO.java + * @Description : 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기위한 데이터 접근 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 11. 이삼섭 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 11. + * @version + * @see + * + */ +@Repository("cmmUseDAO") +public class CmmUseDAO extends EgovComAbstractDAO { + + /** + * 주어진 조건에 따른 공통코드를 불러온다. + * + * @param vo + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public List selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception { + return (List) list("CmmUseDAO.selectCmmCodeDetail", vo); + } + + /** + * 공통코드로 사용할 조직정보를 를 불러온다. + * + * @param vo + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public List selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception { + return (List) list("CmmUseDAO.selectOgrnztIdDetail", vo); + } + + /** + * 공통코드로 사용할그룹정보를 를 불러온다. + * @param vo + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public List selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception { + return (List) list("CmmUseDAO.selectGroupIdDetail", vo); + } +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/EgovCmmUseServiceImpl.java b/src/main/java/egovframework/com/cmm/service/impl/EgovCmmUseServiceImpl.java new file mode 100644 index 0000000..680be70 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/EgovCmmUseServiceImpl.java @@ -0,0 +1,91 @@ +package egovframework.com.cmm.service.impl; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.service.CmmnDetailCode; +import egovframework.com.cmm.service.EgovCmmUseService; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +/** + * @Class Name : EgovCmmUseServiceImpl.java + * @Description : 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기위한 서비스 구현 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 11. 이삼섭 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 11. + * @version + * @see + * + */ +@Service("EgovCmmUseService") +public class EgovCmmUseServiceImpl extends EgovAbstractServiceImpl implements EgovCmmUseService { + + @Resource(name = "cmmUseDAO") + private CmmUseDAO cmmUseDAO; + + /** + * 공통코드를 조회한다. + * + * @param vo + * @return + * @throws Exception + */ + public List selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception { + return cmmUseDAO.selectCmmCodeDetail(vo); + } + + /** + * ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다. + * + * @param voList + * @return + * @throws Exception + */ + public Map> selectCmmCodeDetails(List voList) throws Exception { + ComDefaultCodeVO vo; + Map> map = new HashMap>(); + + Iterator iter = voList.iterator(); + while (iter.hasNext()) { + vo = (ComDefaultCodeVO)iter.next(); + map.put(vo.getCodeId(), cmmUseDAO.selectCmmCodeDetail(vo)); + } + + return map; + } + + /** + * 조직정보를 코드형태로 리턴한다. + * + * @param 조회조건정보 vo + * @return 조직정보 List + * @throws Exception + */ + public List selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception { + return cmmUseDAO.selectOgrnztIdDetail(vo); + } + + /** + * 그룹정보를 코드형태로 리턴한다. + * + * @param 조회조건정보 vo + * @return 그룹정보 List + * @throws Exception + */ + public List selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception { + return cmmUseDAO.selectGroupIdDetail(vo); + } +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/EgovComAbstractDAO.java b/src/main/java/egovframework/com/cmm/service/impl/EgovComAbstractDAO.java new file mode 100644 index 0000000..0358926 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/EgovComAbstractDAO.java @@ -0,0 +1,36 @@ +/** + * + */ +package egovframework.com.cmm.service.impl; + +import egovframework.rte.psl.dataaccess.EgovAbstractDAO; + +import javax.annotation.Resource; + +import com.ibatis.sqlmap.client.SqlMapClient; + +/** + * EgovComAbstractDAO.java 클래스 + * + * @author 서준식 + * @since 2011. 9. 23. + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    -------------    ----------------------
    + *   2011. 9. 23.   서준식        최초 생성
    + * 
    + */ +public abstract class EgovComAbstractDAO extends EgovAbstractDAO{ + + @Resource(name="egov.sqlMapClient") + public void setSuperSqlMapClient(SqlMapClient sqlMapClient) { + super.setSuperSqlMapClient(sqlMapClient); + } + + +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/EgovFileMngServiceImpl.java b/src/main/java/egovframework/com/cmm/service/impl/EgovFileMngServiceImpl.java new file mode 100644 index 0000000..9257998 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/EgovFileMngServiceImpl.java @@ -0,0 +1,156 @@ +package egovframework.com.cmm.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.service.EgovFileMngService; +import egovframework.com.cmm.service.FileVO; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +/** + * @Class Name : EgovFileMngServiceImpl.java + * @Description : 파일정보의 관리를 위한 구현 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 25. 이삼섭 최초생성 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 25. + * @version + * @see + * + */ +@Service("EgovFileMngService") +public class EgovFileMngServiceImpl extends EgovAbstractServiceImpl implements EgovFileMngService { + + @Resource(name = "FileManageDAO") + private FileManageDAO fileMngDAO; + + /** + * 여러 개의 파일을 삭제한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#deleteFileInfs(java.util.List) + */ + public void deleteFileInfs(List fvoList) throws Exception { + fileMngDAO.deleteFileInfs(fvoList); + } + + /** + * 하나의 파일에 대한 정보(속성 및 상세)를 등록한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#insertFileInf(egovframework.com.cmm.service.FileVO) + */ + public String insertFileInf(FileVO fvo) throws Exception { + String atchFileId = fvo.getAtchFileId(); + + fileMngDAO.insertFileInf(fvo); + + return atchFileId; + } + + /** + * 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#insertFileInfs(java.util.List) + */ + public String insertFileInfs(List fvoList) throws Exception { + String atchFileId = ""; + + if (fvoList.size() != 0) { + atchFileId = fileMngDAO.insertFileInfs(fvoList); + } + if (atchFileId == "") { + atchFileId = null; + } + return atchFileId; + } + + /** + * 파일에 대한 목록을 조회한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#selectFileInfs(egovframework.com.cmm.service.FileVO) + */ + public List selectFileInfs(FileVO fvo) throws Exception { + return fileMngDAO.selectFileInfs(fvo); + } + + /** + * 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#updateFileInfs(java.util.List) + */ + public void updateFileInfs(List fvoList) throws Exception { + //Delete & Insert + fileMngDAO.updateFileInfs(fvoList); + } + + /** + * 하나의 파일을 삭제한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#deleteFileInf(egovframework.com.cmm.service.FileVO) + */ + public void deleteFileInf(FileVO fvo) throws Exception { + fileMngDAO.deleteFileInf(fvo); + } + + /** + * 파일에 대한 상세정보를 조회한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#selectFileInf(egovframework.com.cmm.service.FileVO) + */ + public FileVO selectFileInf(FileVO fvo) throws Exception { + return fileMngDAO.selectFileInf(fvo); + } + + /** + * 파일 구분자에 대한 최대값을 구한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#getMaxFileSN(egovframework.com.cmm.service.FileVO) + */ + public int getMaxFileSN(FileVO fvo) throws Exception { + return fileMngDAO.getMaxFileSN(fvo); + } + + /** + * 전체 파일을 삭제한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#deleteAllFileInf(egovframework.com.cmm.service.FileVO) + */ + public void deleteAllFileInf(FileVO fvo) throws Exception { + fileMngDAO.deleteAllFileInf(fvo); + } + + /** + * 파일명 검색에 대한 목록을 조회한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#selectFileListByFileNm(egovframework.com.cmm.service.FileVO) + */ + public Map selectFileListByFileNm(FileVO fvo) throws Exception { + List result = fileMngDAO.selectFileListByFileNm(fvo); + int cnt = fileMngDAO.selectFileListCntByFileNm(fvo); + + Map map = new HashMap(); + + map.put("resultList", result); + map.put("resultCnt", Integer.toString(cnt)); + + return map; + } + + /** + * 이미지 파일에 대한 목록을 조회한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#selectImageFileList(egovframework.com.cmm.service.FileVO) + */ + public List selectImageFileList(FileVO vo) throws Exception { + return fileMngDAO.selectImageFileList(vo); + } +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/EgovTestUserDetailsServiceImpl.java b/src/main/java/egovframework/com/cmm/service/impl/EgovTestUserDetailsServiceImpl.java new file mode 100644 index 0000000..f64190a --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/EgovTestUserDetailsServiceImpl.java @@ -0,0 +1,87 @@ +package egovframework.com.cmm.service.impl; + +import java.util.ArrayList; +import java.util.List; + +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.service.EgovUserDetailsService; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * + * @author 공통서비스 개발팀 서준식 + * @since 2011. 8. 12. + * @version 1.0 + * @see + * + *
    + * 개정이력(Modification Information)
    + *
    + *   수정일      수정자          수정내용
    + *  -------    --------    ---------------------------
    + *  2011. 8. 12.    서준식        최초생성
    + *
    + *  
    + */ + +public class EgovTestUserDetailsServiceImpl extends EgovAbstractServiceImpl implements + EgovUserDetailsService { + + @Override + public Object getAuthenticatedUser() { + + LoginVO loginVO = new LoginVO(); + loginVO.setId("TEST1"); + loginVO.setPassword("raHLBnHFcunwNzcDcfad4PhD11hHgXSUr7fc1Jk9uoQ="); + loginVO.setUserSe("USR"); + loginVO.setEmail("egovframe@nia.or.kr"); + loginVO.setIhidNum(""); + loginVO.setName("더미사용자"); + loginVO.setOrgnztId("ORGNZT_0000000000000"); + loginVO.setUniqId("USRCNFRM_00000000000"); + return loginVO; + + // return + // RequestContextHolder.getRequestAttributes().getAttribute("loginVO", + // RequestAttributes.SCOPE_SESSION); + + } + + @Override + public List getAuthorities() { + + // 권한 설정을 리턴한다. + + List listAuth = new ArrayList(); + listAuth.add("IS_AUTHENTICATED_ANONYMOUSLY"); + listAuth.add("IS_AUTHENTICATED_FULLY"); + listAuth.add("IS_AUTHENTICATED_REMEMBERED"); + listAuth.add("ROLE_ADMIN"); + listAuth.add("ROLE_ANONYMOUS"); + listAuth.add("ROLE_RESTRICTED"); + listAuth.add("ROLE_USER"); + + return listAuth; + } + + @Override + public Boolean isAuthenticated() { + // 인증된 유저인지 확인한다. + + /*if (RequestContextHolder.getRequestAttributes() == null) { + return false; + } else { + + if (RequestContextHolder.getRequestAttributes().getAttribute( + "loginVO", RequestAttributes.SCOPE_SESSION) == null) { + return false; + } else { + return true; + } + }*/ + + return true; + } + +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/EgovUserDetailsSessionServiceImpl.java b/src/main/java/egovframework/com/cmm/service/impl/EgovUserDetailsSessionServiceImpl.java new file mode 100644 index 0000000..a23c5b9 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/EgovUserDetailsSessionServiceImpl.java @@ -0,0 +1,65 @@ +package egovframework.com.cmm.service.impl; + +import java.util.ArrayList; +import java.util.List; + +import egovframework.com.cmm.service.EgovUserDetailsService; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +/** + * + * @author 공통서비스 개발팀 서준식 + * @since 2011. 6. 25. + * @version 1.0 + * @see + * + *
    + * 개정이력(Modification Information) 
    + * 
    + *   수정일      수정자          수정내용
    + *  -------    --------    ---------------------------
    + *  2011. 8. 12.    서준식        최초생성
    + *  
    + *  
    + */ + +public class EgovUserDetailsSessionServiceImpl extends EgovAbstractServiceImpl implements EgovUserDetailsService { + + public Object getAuthenticatedUser() { + if (RequestContextHolder.getRequestAttributes() == null) { + return null; + } + + return RequestContextHolder.getRequestAttributes().getAttribute("loginVO", RequestAttributes.SCOPE_SESSION); + + } + + public List getAuthorities() { + + // 권한 설정을 리턴한다. + List listAuth = new ArrayList(); + + return listAuth; + } + + public Boolean isAuthenticated() { + // 인증된 유저인지 확인한다. + + if (RequestContextHolder.getRequestAttributes() == null) { + return false; + } else { + + if (RequestContextHolder.getRequestAttributes().getAttribute("loginVO", RequestAttributes.SCOPE_SESSION) == null) { + return false; + } else { + return true; + } + } + + } + +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/FileManageDAO.java b/src/main/java/egovframework/com/cmm/service/impl/FileManageDAO.java new file mode 100644 index 0000000..6458880 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/FileManageDAO.java @@ -0,0 +1,181 @@ +package egovframework.com.cmm.service.impl; + +import java.util.Iterator; +import java.util.List; + +import egovframework.com.cmm.service.FileVO; + +import org.springframework.stereotype.Repository; + +/** + * @Class Name : EgovFileMngDAO.java + * @Description : 파일정보 관리를 위한 데이터 처리 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 25. 이삼섭 최초생성 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 25. + * @version + * @see + * + */ +@Repository("FileManageDAO") +public class FileManageDAO extends EgovComAbstractDAO { + + /** + * 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다. + * + * @param fileList + * @return + * @throws Exception + */ + public String insertFileInfs(List fileList) throws Exception { + FileVO vo = (FileVO) fileList.get(0); + String atchFileId = vo.getAtchFileId(); + + insert("FileManageDAO.insertFileMaster", vo); + + Iterator iter = fileList.iterator(); + while (iter.hasNext()) { + vo = (FileVO) iter.next(); + + insert("FileManageDAO.insertFileDetail", vo); + } + + return atchFileId; + } + + /** + * 하나의 파일에 대한 정보(속성 및 상세)를 등록한다. + * + * @param vo + * @throws Exception + */ + public void insertFileInf(FileVO vo) throws Exception { + insert("FileManageDAO.insertFileMaster", vo); + insert("FileManageDAO.insertFileDetail", vo); + } + + /** + * 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다. + * + * @param fileList + * @throws Exception + */ + public void updateFileInfs(List fileList) throws Exception { + FileVO vo; + Iterator iter = fileList.iterator(); + while (iter.hasNext()) { + vo = (FileVO) iter.next(); + insert("FileManageDAO.insertFileDetail", vo); + } + } + + /** + * 여러 개의 파일을 삭제한다. + * + * @param fileList + * @throws Exception + */ + public void deleteFileInfs(List fileList) throws Exception { + Iterator iter = fileList.iterator(); + FileVO vo; + while (iter.hasNext()) { + vo = (FileVO) iter.next(); + + delete("FileManageDAO.deleteFileDetail", vo); + } + } + + /** + * 하나의 파일을 삭제한다. + * + * @param fvo + * @throws Exception + */ + public void deleteFileInf(FileVO fvo) throws Exception { + delete("FileManageDAO.deleteFileDetail", fvo); + } + + /** + * 파일에 대한 목록을 조회한다. + * + * @param vo + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public List selectFileInfs(FileVO vo) throws Exception { + return (List) list("FileManageDAO.selectFileList", vo); + } + + /** + * 파일 구분자에 대한 최대값을 구한다. + * + * @param fvo + * @return + * @throws Exception + */ + public int getMaxFileSN(FileVO fvo) throws Exception { + return (Integer) select("FileManageDAO.getMaxFileSN", fvo); + } + + /** + * 파일에 대한 상세정보를 조회한다. + * + * @param fvo + * @return + * @throws Exception + */ + public FileVO selectFileInf(FileVO fvo) throws Exception { + return (FileVO) select("FileManageDAO.selectFileInf", fvo); + } + + /** + * 전체 파일을 삭제한다. + * + * @param fvo + * @throws Exception + */ + public void deleteAllFileInf(FileVO fvo) throws Exception { + update("FileManageDAO.deleteCOMTNFILE", fvo); + } + + /** + * 파일명 검색에 대한 목록을 조회한다. + * + * @param vo + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public List selectFileListByFileNm(FileVO fvo) throws Exception { + return (List) list("FileManageDAO.selectFileListByFileNm", fvo); + } + + /** + * 파일명 검색에 대한 목록 전체 건수를 조회한다. + * + * @param fvo + * @return + * @throws Exception + */ + public int selectFileListCntByFileNm(FileVO fvo) throws Exception { + return (Integer) select("FileManageDAO.selectFileListCntByFileNm", fvo); + } + + /** + * 이미지 파일에 대한 목록을 조회한다. + * + * @param vo + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public List selectImageFileList(FileVO vo) throws Exception { + return (List) list("FileManageDAO.selectImageFileList", vo); + } +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/IpCountryMapper.java b/src/main/java/egovframework/com/cmm/service/impl/IpCountryMapper.java new file mode 100644 index 0000000..b45dd48 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/IpCountryMapper.java @@ -0,0 +1,26 @@ +package egovframework.com.cmm.service.impl; + +import egovframework.com.cmm.service.IpCountryVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +import org.springframework.stereotype.Repository; + +/** + * @파일명 : IpCountryMapper.java + * @파일정보 : 아이피 국가정보 조회 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Mapper("ipCountryMapper") +public interface IpCountryMapper { + + IpCountryVO getCountryNameAndCode(long ipConvertNumber); + +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/IpCountryServiceImpl.java b/src/main/java/egovframework/com/cmm/service/impl/IpCountryServiceImpl.java new file mode 100644 index 0000000..7239faa --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/IpCountryServiceImpl.java @@ -0,0 +1,64 @@ +package egovframework.com.cmm.service.impl; + +import egovframework.com.cmm.service.IpCountryService; +import egovframework.com.cmm.service.IpCountryVO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * @파일명 : IpCountryServiceImpl.java + * @파일정보 : 아이피 국가정보 조회 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Service("ipCountryService") +public class IpCountryServiceImpl implements IpCountryService { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + @Resource(name = "ipCountryMapper") + private IpCountryMapper ipCountryMapper; + + @Override + public IpCountryVO getCountryNameAndCode(String ip) { + + IpCountryVO ipCountryVO; + + //로컬아이피 + if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) { + ipCountryVO = new IpCountryVO(); + ipCountryVO.setCountryCode(""); + ipCountryVO.setCountryName(""); + return ipCountryVO; + } + + String[] tmpIp = ip.split("\\."); + + long w = Integer.parseInt(tmpIp[0]) * 16777216L; + long x = Integer.parseInt(tmpIp[1]) * 65536L; + long y = Integer.parseInt(tmpIp[2]) * 256L; + long z = Integer.parseInt(tmpIp[3]); + + long ipConvertNumber = w + x + y + z; + + ipCountryVO = ipCountryMapper.getCountryNameAndCode(ipConvertNumber); + if (ipCountryVO == null) { + ipCountryVO = new IpCountryVO(); + ipCountryVO.setCountryCode(""); + ipCountryVO.setCountryName(""); + } + + return ipCountryVO; + } + +} diff --git a/src/main/java/egovframework/com/cmm/servlet/CaptchaGenAudioServlet.java b/src/main/java/egovframework/com/cmm/servlet/CaptchaGenAudioServlet.java new file mode 100644 index 0000000..2e6122a --- /dev/null +++ b/src/main/java/egovframework/com/cmm/servlet/CaptchaGenAudioServlet.java @@ -0,0 +1,30 @@ +package egovframework.com.cmm.servlet; + +import nl.captcha.Captcha; +import nl.captcha.audio.AudioCaptcha; +import nl.captcha.servlet.CaptchaServletUtil; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +public class CaptchaGenAudioServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + HttpSession session = req.getSession(); + + String answer = (String) session.getAttribute("CMS_CAPTCHA"); + + if (answer != null && !answer.equals("")) { + AudioCaptcha audiocaptcha = new AudioCaptcha.Builder() + .addAnswer(new SetTextProducer(answer)) + .addNoise() //잡음추가 + .build(); + + CaptchaServletUtil.writeAudio(resp, audiocaptcha.getChallenge()); + } + } +} diff --git a/src/main/java/egovframework/com/cmm/servlet/CaptchaGenServlet.java b/src/main/java/egovframework/com/cmm/servlet/CaptchaGenServlet.java new file mode 100644 index 0000000..d8dd5e7 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/servlet/CaptchaGenServlet.java @@ -0,0 +1,44 @@ +package egovframework.com.cmm.servlet; + +import nl.captcha.Captcha; +import nl.captcha.backgrounds.GradiatedBackgroundProducer; +import nl.captcha.gimpy.FishEyeGimpyRenderer; +import nl.captcha.noise.StraightLineNoiseProducer; +import nl.captcha.servlet.CaptchaServletUtil; +import nl.captcha.text.producer.NumbersAnswerProducer; +import nl.captcha.text.renderer.DefaultWordRenderer; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.awt.*; +import java.io.IOException; +import java.util.ArrayList; + +public class CaptchaGenServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + java.util.List fontList = new ArrayList<>(); + fontList.add(new Font("", Font.HANGING_BASELINE, 40)); + fontList.add(new Font("Courier", Font.ITALIC, 40)); + fontList.add(new Font("", Font.PLAIN, 40)); + + java.util.List colorList = new ArrayList<>(); + colorList.add(Color.black); + + Captcha captcha = new Captcha.Builder(230, 60) + .addText(new NumbersAnswerProducer(6), new DefaultWordRenderer(colorList, fontList)) + .addBackground(new GradiatedBackgroundProducer()) + .gimp(new FishEyeGimpyRenderer()) + .addNoise(new StraightLineNoiseProducer()) + .addBorder() + .build(); + + resp.setContentType("image/jpeg"); + CaptchaServletUtil.writeImage(resp, captcha.getImage()); + req.getSession().setAttribute("CMS_CAPTCHA", captcha.getAnswer()); + } + +} diff --git a/src/main/java/egovframework/com/cmm/servlet/SetTextProducer.java b/src/main/java/egovframework/com/cmm/servlet/SetTextProducer.java new file mode 100644 index 0000000..7229d28 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/servlet/SetTextProducer.java @@ -0,0 +1,16 @@ +package egovframework.com.cmm.servlet; + +import nl.captcha.text.producer.TextProducer; + +public class SetTextProducer implements TextProducer { + private final String srcStr; + + public SetTextProducer(String answer) { + srcStr = answer; + } + + @Override + public String getText() { + return srcStr; + } +} diff --git a/src/main/java/egovframework/com/cmm/taglibs/DoubleSubmitTag.java b/src/main/java/egovframework/com/cmm/taglibs/DoubleSubmitTag.java new file mode 100644 index 0000000..95a750a --- /dev/null +++ b/src/main/java/egovframework/com/cmm/taglibs/DoubleSubmitTag.java @@ -0,0 +1,88 @@ +package egovframework.com.cmm.taglibs; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import egovframework.com.cmm.util.EgovDoubleSubmitHelper; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.JspTagException; +import javax.servlet.jsp.tagext.TagSupport; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * TagSupport to support to double submit preventer + * @author Vincent Han + * @since 2014.08.07 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *   
    + *   수정일        수정자       수정내용
    + *  -------       --------    ---------------------------
    + *   2014.08.07	표준프레임워크센터	최초 생성
    + *
    + * 
    + */ +public class DoubleSubmitTag extends TagSupport { + private static final Logger LOGGER = LoggerFactory.getLogger(DoubleSubmitTag.class); + + /** + * Generated Serial Version UID + */ + private static final long serialVersionUID = 5242217605452312594L; + + private String tokenKey = EgovDoubleSubmitHelper.DEFAULT_TOKEN_KEY; + + public String getTokenKey() { + return tokenKey; + } + + public void setTokenKey(String tokenKey) { + this.tokenKey = tokenKey; + } + + @SuppressWarnings("unchecked") + public int doStartTag() throws JspException { + StringBuilder buffer = new StringBuilder(); + + HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); + HttpSession session = request.getSession(); + + Map map = null; + + if (session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY) == null) { + map = new HashMap(); + + session.setAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY, map); + } else { + map = (Map) session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY); + } + + // First call (check session) + if (map.get(tokenKey) == null) { + + map.put(tokenKey, EgovDoubleSubmitHelper.getNewUUID()); + + LOGGER.debug("[Double Submit] session token created({}) : {}", tokenKey, map.get(tokenKey)); + } + + buffer.append(""); + + try { + pageContext.getOut().print(buffer.toString()); + } catch (IOException e) { + throw new JspTagException("Error: IOException while writing to the user"); + } + + return SKIP_BODY; + } + +} diff --git a/src/main/java/egovframework/com/cmm/util/EgovBasicLogger.java b/src/main/java/egovframework/com/cmm/util/EgovBasicLogger.java new file mode 100644 index 0000000..5911261 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/util/EgovBasicLogger.java @@ -0,0 +1,83 @@ +package egovframework.com.cmm.util; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Utility class to support to logging information + * @author Vincent Han + * @since 2014.09.18 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *   
    + *   수정일        수정자       수정내용
    + *  -------       --------    ---------------------------
    + *   2014.09.18	표준프레임워크센터	최초 생성
    + *
    + * 
    + */ +public class EgovBasicLogger { + private static final Level IGNORE_INFO_LEVEL = Level.OFF; + private static final Level DEBUG_INFO_LEVEL = Level.FINEST; + private static final Level INFO_INFO_LEVEL = Level.INFO; + + private static final Logger ignoreLogger = Logger.getLogger("ignore"); + private static final Logger debugLogger = Logger.getLogger("debug"); + private static final Logger infoLogger = Logger.getLogger("info"); + + /** + * 기록이나 처리가 불필요한 경우 사용. + * @param message + * @param exception + */ + public static void ignore(String message, Exception exception) { + if (exception == null) { + ignoreLogger.log(IGNORE_INFO_LEVEL, message); + } else { + ignoreLogger.log(IGNORE_INFO_LEVEL, message, exception); + } + } + + /** + * 기록이나 처리가 불필요한 경우 사용. + * @param message + * @param exception + */ + public static void ignore(String message) { + ignore(message, null); + } + + /** + * 디버그 정보를 기록하는 경우 사용. + * @param message + * @param exception + */ + public static void debug(String message, Exception exception) { + if (exception == null) { + debugLogger.log(DEBUG_INFO_LEVEL, message); + } else { + debugLogger.log(DEBUG_INFO_LEVEL, message, exception); + } + } + + /** + * 디버그 정보를 기록하는 경우 사용. + * @param message + * @param exception + */ + public static void debug(String message) { + debug(message, null); + } + + /** + * 일반적이 정보를 기록하는 경우 사용. + * @param message + * @param exception + */ + public static void info(String message) { + infoLogger.log(INFO_INFO_LEVEL, message); + } +} diff --git a/src/main/java/egovframework/com/cmm/util/EgovDoubleSubmitHelper.java b/src/main/java/egovframework/com/cmm/util/EgovDoubleSubmitHelper.java new file mode 100644 index 0000000..672087e --- /dev/null +++ b/src/main/java/egovframework/com/cmm/util/EgovDoubleSubmitHelper.java @@ -0,0 +1,80 @@ +package egovframework.com.cmm.util; + +import java.util.Map; +import java.util.UUID; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +/** + * Utility class to support to double submit preventer + * @author Vincent Han + * @since 2014.08.07 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *   
    + *   수정일        수정자       수정내용
    + *  -------       --------    ---------------------------
    + *   2014.08.07	표준프레임워크센터	최초 생성
    + *
    + * 
    + */ +public class EgovDoubleSubmitHelper { + private static final Logger LOGGER = LoggerFactory.getLogger(EgovDoubleSubmitHelper.class); + + public final static String SESSION_TOKEN_KEY = "egovframework.double.submit.preventer.session.key"; + + public final static String PARAMETER_NAME = "egovframework.double.submit.preventer.parameter.name"; + + public final static String DEFAULT_TOKEN_KEY = "DEFAULT"; + + public static String getNewUUID() { + return UUID.randomUUID().toString().toUpperCase(); + } + + public static boolean checkAndSaveToken() { + return checkAndSaveToken(DEFAULT_TOKEN_KEY); + } + + public static boolean checkAndSaveToken(String tokenKey) { + + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + HttpSession session = request.getSession(); + + // check session... + if (session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY) == null) { + throw new RuntimeException("Double Submit Preventer TagLig isn't set. Check JSP."); + } + + String parameter = request.getParameter(EgovDoubleSubmitHelper.PARAMETER_NAME); + + // check parameter + if (parameter == null) { + throw new RuntimeException("Double Submit Preventer parameter isn't set. Check JSP."); + } + + @SuppressWarnings("unchecked") + Map map = (Map) session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY); + + if (parameter.equals(map.get(tokenKey))) { + + LOGGER.debug("[Double Submit] session token ({}) equals to parameter token.", tokenKey); + + map.put(tokenKey, getNewUUID()); + + return true; + } + + LOGGER.debug("[Double Submit] session token ({}) isn't equal to parameter token.", tokenKey); + + return false; + } +} diff --git a/src/main/java/egovframework/com/cmm/util/EgovHttpRequestHelper.java b/src/main/java/egovframework/com/cmm/util/EgovHttpRequestHelper.java new file mode 100644 index 0000000..4da5ef4 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/util/EgovHttpRequestHelper.java @@ -0,0 +1,56 @@ +package egovframework.com.cmm.util; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +/** + * @Class Name : EgovHttpRequestHelper.java + * @Description : HTTP Request 정보 취득 Helper 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2014.09.11 표준프레임워크 최초생성 +* @author Vincent Han + * @since 2014.09.11 + * @version 3.5 + * @see
    + * web.xml 상에 다음과 같은 Listener 등록 필요
    + * <listener>
    + *	  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    + * </listener>
    + * 
    + */ +public class EgovHttpRequestHelper { + + public static boolean isInHttpRequest() { + try { + getCurrentRequest(); + } catch (IllegalStateException ise) { + return false; + } + + return true; + } + + public static HttpServletRequest getCurrentRequest() { + ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); + + return sra.getRequest(); + } + + public static String getRequestIp() { + return getCurrentRequest().getRemoteAddr(); + } + + public static String getRequestURI() { + return getCurrentRequest().getRequestURI(); + } + + public static HttpSession getCurrentSession() { + return getCurrentRequest().getSession(); + } +} diff --git a/src/main/java/egovframework/com/cmm/util/EgovResourceCloseHelper.java b/src/main/java/egovframework/com/cmm/util/EgovResourceCloseHelper.java new file mode 100644 index 0000000..75fb2ce --- /dev/null +++ b/src/main/java/egovframework/com/cmm/util/EgovResourceCloseHelper.java @@ -0,0 +1,126 @@ +package egovframework.com.cmm.util; + +import java.io.Closeable; +import java.net.ServerSocket; +import java.net.Socket; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; +import java.sql.Wrapper; + +/** + * Utility class to support to close resources + * @author Vincent Han + * @since 2014.09.18 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *   
    + *   수정일        수정자       수정내용
    + *  -------       --------    ---------------------------
    + *   2014.09.18	표준프레임워크센터	최초 생성
    + *
    + * 
    + */ +public class EgovResourceCloseHelper { + /** + * Resource close 처리. + * @param resources + */ + public static void close(Closeable ... resources) { + for (Closeable resource : resources) { + if (resource != null) { + try { + resource.close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!"); + } + } + } + } + + /** + * JDBC 관련 resource 객체 close 처리 + * @param objects + */ + public static void closeDBObjects(Wrapper ... objects) { + for (Object object : objects) { + if (object != null) { + if (object instanceof ResultSet) { + try { + ((ResultSet)object).close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!"); + } + } else if (object instanceof Statement) { + try { + ((Statement)object).close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!"); + } + } else if (object instanceof Connection) { + try { + ((Connection)object).close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!"); + } + } else { + throw new IllegalArgumentException("Wrapper type is not found : " + object.toString()); + } + } + } + } + + /** + * Socket 관련 resource 객체 close 처리 + * @param objects + */ + public static void closeSocketObjects(Socket socket, ServerSocket server) { + if (socket != null) { + try { + socket.shutdownOutput(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to shutdown ouput is ignored!!"); + } + + try { + socket.close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ignored!!"); + } + } + + if (server != null) { + try { + server.close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ignored!!"); + } + } + } + + /** + * Socket 관련 resource 객체 close 처리 + * + * @param sockets + */ + public static void closeSockets(Socket ... sockets) { + for (Socket socket : sockets) { + if (socket != null) { + try { + socket.shutdownOutput(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to shutdown ouput is ignored!!"); + } + + try { + socket.close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ignored!!"); + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/cmm/util/EgovUrlRewriteFilter.java b/src/main/java/egovframework/com/cmm/util/EgovUrlRewriteFilter.java new file mode 100644 index 0000000..0af1b96 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/util/EgovUrlRewriteFilter.java @@ -0,0 +1,109 @@ +package egovframework.com.cmm.util; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.util.AntPathMatcher; + +/** + * @Class Name : UrlRewriteFilter.java + * @Description : UrlRewriteFilter Class + * @Modification Information + * @ + * @ 수정일 수정자 수정내용 + * @ --------- --------- ------------------------------- + * @ 2014.09.30 최초생성 + * + * @author 전자정부 표준프레임워크 유지보수 + * @since 2014. 09.30 + * @version 1.0 + * @see + * + * Copyright (C) by MOPAS All right reserved. + */ +public class EgovUrlRewriteFilter implements Filter { + + @SuppressWarnings("unused") + private FilterConfig config; + + private String targetURI; + private String httpsPort; + private String httpPort; + + private String[] uriPatterns; + + @Override + public void init(FilterConfig config) throws ServletException { + + String delimiter = ","; + this.config = config; + + this.targetURI = config.getInitParameter("targetURI"); + this.httpsPort = config.getInitParameter("httpsPort"); + this.httpPort = config.getInitParameter("httpPort"); + + this.uriPatterns = targetURI.split(delimiter); + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { + + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse res = (HttpServletResponse) response; + + String uri = req.getRequestURI(); + String getProtocol = req.getScheme(); + String getDomain = req.getServerName(); + + AntPathMatcher pm = new AntPathMatcher(); + + for (String uriPattern : uriPatterns) { + + if (pm.match(uriPattern.trim(), uri)) { + + if (getProtocol.toLowerCase().equals("http")) { + + response.setContentType("text/html"); + + String httpsPath = "https" + "://" + getDomain + ":" + httpsPort + uri; + String site = new String(httpsPath); + res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); + res.setHeader("Location", site); + + } + + }else if(getProtocol.toLowerCase().equals("https")){ + + response.setContentType("text/html"); + + String httpPath = "http" + "://" + getDomain + ":" + httpPort + uri; + + String site = new String(httpPath); + res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); + res.setHeader("Location", site); + + } + } + + chain.doFilter(req, res); + + } + + @Override + public void destroy() { + this.targetURI = null; + this.httpsPort = null; + this.httpPort = null; + this.uriPatterns = null; + } + +} diff --git a/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java b/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java new file mode 100644 index 0000000..0f67b14 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java @@ -0,0 +1,61 @@ +package egovframework.com.cmm.util; + +import java.util.List; + +import egovframework.com.cmm.service.EgovUserDetailsService; + +/** + * EgovUserDetails Helper 클래스 + * + * @author sjyoon + * @since 2009.06.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    -------------    ----------------------
    + *   2009.03.10  sjyoon         최초 생성
    + *   2011.07.01	 서준식          interface 생성후 상세 로직의 분리
    + * 
    + */ + +public class EgovUserDetailsHelper { + + static EgovUserDetailsService egovUserDetailsService; + + public EgovUserDetailsService getEgovUserDetailsService() { + return egovUserDetailsService; + } + + public void setEgovUserDetailsService(EgovUserDetailsService egovUserDetailsService) { + EgovUserDetailsHelper.egovUserDetailsService = egovUserDetailsService; + } + + /** + * 인증된 사용자객체를 VO형식으로 가져온다. + * @return Object - 사용자 ValueObject + */ + public static Object getAuthenticatedUser() { + return egovUserDetailsService.getAuthenticatedUser(); + } + + /** + * 인증된 사용자의 권한 정보를 가져온다. + * + * @return List - 사용자 권한정보 목록 + */ + public static List getAuthorities() { + return egovUserDetailsService.getAuthorities(); + } + + /** + * 인증된 사용자 여부를 체크한다. + * @return Boolean - 인증된 사용자 여부(TRUE / FALSE) + */ + public static Boolean isAuthenticated() { + return egovUserDetailsService.isAuthenticated(); + } +} diff --git a/src/main/java/egovframework/com/cmm/web/EgovBindingInitializer.java b/src/main/java/egovframework/com/cmm/web/EgovBindingInitializer.java new file mode 100644 index 0000000..33a1ab4 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovBindingInitializer.java @@ -0,0 +1,22 @@ +package egovframework.com.cmm.web; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.springframework.beans.propertyeditors.CustomDateEditor; +import org.springframework.beans.propertyeditors.StringTrimmerEditor; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.support.WebBindingInitializer; +import org.springframework.web.context.request.WebRequest; + +public class EgovBindingInitializer implements WebBindingInitializer { + + + public void initBinder(WebDataBinder binder, WebRequest request) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + dateFormat.setLenient(false); + binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false)); + binder.registerCustomEditor(String.class, new StringTrimmerEditor(false)); + } + +} diff --git a/src/main/java/egovframework/com/cmm/web/EgovComIndexController.java b/src/main/java/egovframework/com/cmm/web/EgovComIndexController.java new file mode 100644 index 0000000..a2cbae8 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovComIndexController.java @@ -0,0 +1,169 @@ +package egovframework.com.cmm.web; + +/** + * 컴포넌트 설치 후 설치된 컴포넌트들을 IncludedInfo annotation을 통해 찾아낸 후 + * 화면에 표시할 정보를 처리하는 Controller 클래스 + * + * 개발시 메뉴 구조가 잡히기 전에 배포파일들에 포함된 공통 컴포넌트들의 목록성 화면에 + * URL을 제공하여 개발자가 편하게 활용하도록 하기 위해 작성된 것으로, + * 실제 운영되는 시스템에서는 적용해서는 안 됨 + * 실 운영 시에는 삭제해서 배포해도 좋음 + * + * 운영시에 본 컨트롤을 사용하여 메뉴를 구성하는 경우 성능 문제를 일으키거나 + * 사용자별 메뉴 구성에 오류를 발생할 수 있음 + * @author 공통컴포넌트 정진오 + * @since 2011.08.26 + * @version 2.0.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *  수정일		수정자		수정내용
    + *  -------    	--------    ---------------------------
    + *  2011.08.26	정진오 		최초 생성
    + *  2011.09.16  서준식		컨텐츠 페이지 생성
    + *  2011.09.26  이기하		header, footer 페이지 생성
    + * 
    + */ + +import java.lang.reflect.Method; +import java.util.Map; +import java.util.TreeMap; + +import egovframework.com.cmm.IncludedCompInfoVO; +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.annotation.IncludedInfo; +import egovframework.com.cmm.util.EgovUserDetailsHelper; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class EgovComIndexController implements ApplicationContextAware, InitializingBean { + + private ApplicationContext applicationContext; + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovComIndexController.class); + + private Map map; + + public void afterPropertiesSet() throws Exception {} + + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + +// LOGGER.info("EgovComIndexController setApplicationContext method has called!"); + } + + @RequestMapping("/index.do") + public String index(ModelMap model) { + return "com/cmm/EgovUnitMain"; + } + + @RequestMapping("/EgovTop.do") + public String top() { + return "com/cmm/EgovUnitTop"; + } + + @RequestMapping("/EgovBottom.do") + public String bottom() { + return "com/cmm/EgovUnitBottom"; + } + + @RequestMapping("/EgovContent.do") + public String setContent(ModelMap model) { + + LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + model.addAttribute("loginVO", loginVO); + + return "com/cmm/EgovUnitContent"; + } + + @RequestMapping("/EgovLeft.do") + public String setLeftMenu(ModelMap model) { + + /* 최초 한 번만 실행하여 map에 저장해 놓는다. */ + if (map == null) { + map = new TreeMap(); + RequestMapping rmAnnotation; + IncludedInfo annotation; + IncludedCompInfoVO zooVO; + + /* + * EgovLoginController가 AOP Proxy되는 바람에 클래스를 reflection으로 가져올 수 없음 + */ + try { + Class loginController = Class.forName("egovframework.com.uat.uia.web.EgovLoginController"); + Method[] methods = loginController.getMethods(); + for (int i = 0; i < methods.length; i++) { + annotation = methods[i].getAnnotation(IncludedInfo.class); + + if (annotation != null) { + LOGGER.debug("Found @IncludedInfo Method : {}", methods[i]); + zooVO = new IncludedCompInfoVO(); + zooVO.setName(annotation.name()); + zooVO.setOrder(annotation.order()); + zooVO.setGid(annotation.gid()); + + rmAnnotation = methods[i].getAnnotation(RequestMapping.class); + if ("".equals(annotation.listUrl()) && rmAnnotation != null) { + zooVO.setListUrl(rmAnnotation.value()[0]); + } else { + zooVO.setListUrl(annotation.listUrl()); + } + map.put(zooVO.getOrder(), zooVO); + } + } + } catch (ClassNotFoundException e) { + LOGGER.error("No egovframework.com.uat.uia.web.EgovLoginController!!"); + } + /* 여기까지 AOP Proxy로 인한 코드 */ + + /*@Controller Annotation 처리된 클래스를 모두 찾는다.*/ + Map myZoos = applicationContext.getBeansWithAnnotation(Controller.class); + LOGGER.debug("How many Controllers : ", myZoos.size()); + for (final Object myZoo : myZoos.values()) { + Class zooClass = myZoo.getClass(); + + Method[] methods = zooClass.getMethods(); + LOGGER.debug("Controller Detected {}", zooClass); + for (int i = 0; i < methods.length; i++) { + annotation = methods[i].getAnnotation(IncludedInfo.class); + + if (annotation != null) { + //LOG.debug("Found @IncludedInfo Method : " + methods[i] ); + zooVO = new IncludedCompInfoVO(); + zooVO.setName(annotation.name()); + zooVO.setOrder(annotation.order()); + zooVO.setGid(annotation.gid()); + /* + * 목록형 조회를 위한 url 매핑은 @IncludedInfo나 @RequestMapping에서 가져온다 + */ + rmAnnotation = methods[i].getAnnotation(RequestMapping.class); + if ("".equals(annotation.listUrl())) { + zooVO.setListUrl(rmAnnotation.value()[0]); + } else { + zooVO.setListUrl(annotation.listUrl()); + } + + map.put(zooVO.getOrder(), zooVO); + } + } + } + } + + model.addAttribute("resultList", map.values()); + + LOGGER.debug("EgovComIndexController index is called "); + + return "com/cmm/EgovUnitLeft"; + } +} diff --git a/src/main/java/egovframework/com/cmm/web/EgovComUtlController.java b/src/main/java/egovframework/com/cmm/web/EgovComUtlController.java new file mode 100644 index 0000000..a42a96c --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovComUtlController.java @@ -0,0 +1,58 @@ +package egovframework.com.cmm.web; + +import egovframework.rte.fdl.property.EgovPropertyService; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @Class Name : EgovComUtlController.java + * @Description : 공통유틸리티성 작업을 위한 Controller + * @Modification Information + * @ + * @ 수정일 수정자 수정내용 + * @ ------- -------- --------------------------- + * @ 2009.03.02 조재영 최초 생성 + * @ 2011.10.07 이기하 .action -> .do로 변경하면서 동일 매핑이 되어 삭제처리 + * + * @author 공통서비스 개발팀 조재영 + * @since 2009.03.02 + * @version 1.0 + * @see + * + */ +@Controller +public class EgovComUtlController { + + //@Resource(name = "egovUserManageService") + //private EgovUserManageService egovUserManageService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** + * JSP 호출작업만 처리하는 공통 함수 + */ + @RequestMapping(value="/EgovPageLink.do") + public String moveToPage(@RequestParam("link") String linkPage){ + String link = linkPage; + // service 사용하여 리턴할 결과값 처리하는 부분은 생략하고 단순 페이지 링크만 처리함 + if (linkPage==null || linkPage.equals("")){ + link="egovframework/com/cmm/egovError"; + } + return link; + } + + /** + * validato rule dynamic Javascript + */ + @RequestMapping("/validator.do") + public String validate(){ + return "egovframework/com/cmm/validator"; + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java b/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java new file mode 100644 index 0000000..04c0a8b --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java @@ -0,0 +1,188 @@ +package egovframework.com.cmm.web; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.URLEncoder; +import java.util.Map; + +import egovframework.com.cmm.service.EgovFileMngService; +import egovframework.com.cmm.service.FileVO; +import egovframework.com.cmm.util.EgovBasicLogger; +import egovframework.com.cmm.util.EgovResourceCloseHelper; +import egovframework.com.cmm.util.EgovUserDetailsHelper; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Controller; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 파일 다운로드를 위한 컨트롤러 클래스 + * @author 공통서비스개발팀 이삼섭 + * @since 2009.06.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *     수정일      	수정자           수정내용
    + *  ------------   --------    ---------------------------
    + *   2009.03.25  	이삼섭          최초 생성
    + *   2014.02.24		이기하          IE11 브라우저 한글 파일 다운로드시 에러 수정
    + *
    + * Copyright (C) 2009 by MOPAS  All right reserved.
    + * 
    + */ +@Controller +public class EgovFileDownloadController { + + @Resource(name = "EgovFileMngService") + private EgovFileMngService fileService; + + /** + * 브라우저 구분 얻기. + * + * @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 IOException("Not supported browser"); + } + + response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename); + + if ("Opera".equals(browser)) { + response.setContentType("application/octet-stream;charset=UTF-8"); + } + } + + /** + * 첨부파일로 등록된 파일에 대하여 다운로드를 제공한다. + * + * @param commandMap + * @param response + * @throws Exception + */ + @RequestMapping(value = "/cmm/fms/FileDown.do") + public void cvplFileDownload(@RequestParam Map commandMap, HttpServletRequest request, HttpServletResponse response) throws Exception { + + String atchFileId = (String) commandMap.get("atchFileId"); + String fileSn = (String) commandMap.get("fileSn"); + + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + + if (isAuthenticated) { + + FileVO fileVO = new FileVO(); + fileVO.setAtchFileId(atchFileId); + fileVO.setFileSn(fileSn); + FileVO fvo = fileService.selectFileInf(fileVO); + + File uFile = new File(fvo.getFileStreCours(), fvo.getStreFileNm()); + int fSize = (int) uFile.length(); + + if (fSize > 0) { + String mimetype = "application/x-msdownload"; + + //response.setBufferSize(fSize); // OutOfMemeory 발생 + response.setContentType(mimetype); + //response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fvo.getOrignlFileNm(), "UTF-8") + "\""); + setDisposition(fvo.getOrignlFileNm(), request, response); + response.setContentLength(fSize); + + /* + * FileCopyUtils.copy(in, response.getOutputStream()); + * in.close(); + * response.getOutputStream().flush(); + * response.getOutputStream().close(); + */ + BufferedInputStream in = null; + BufferedOutputStream out = null; + + try { + in = new BufferedInputStream(new FileInputStream(uFile)); + out = new BufferedOutputStream(response.getOutputStream()); + + FileCopyUtils.copy(in, out); + out.flush(); + } catch (IOException ex) { + // 다음 Exception 무시 처리 + // Connection reset by peer: socket write error + EgovBasicLogger.ignore("IO Exception", ex); + } finally { + EgovResourceCloseHelper.close(in, out); + } + + } else { + response.setContentType("application/x-msdownload"); + + PrintWriter printwriter = response.getWriter(); + + printwriter.println(""); + printwriter.println("


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

    "); + printwriter.println("


    Back

    "); + printwriter.println("


    © webAccess"); + printwriter.println(""); + + printwriter.flush(); + printwriter.close(); + } + } + } +} diff --git a/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java b/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java new file mode 100644 index 0000000..671f9bb --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java @@ -0,0 +1,159 @@ +package egovframework.com.cmm.web; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.service.EgovFileMngService; +import egovframework.com.cmm.service.FileVO; +import egovframework.com.cmm.util.EgovUserDetailsHelper; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 파일 조회, 삭제, 다운로드 처리를 위한 컨트롤러 클래스 + * @author 공통서비스개발팀 이삼섭 + * @since 2009.06.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.3.25  이삼섭          최초 생성
    + *
    + * 
    + */ +@Controller +public class EgovFileMngController { + + @Resource(name = "EgovFileMngService") + private EgovFileMngService fileService; + + /** + * 첨부파일에 대한 목록을 조회한다. + * + * @param fileVO + * @param atchFileId + * @param sessionVO + * @param model + * @return + * @throws Exception + */ + @RequestMapping("/cmm/fms/selectFileInfs.do") + public String selectFileInfs(@ModelAttribute("searchVO") FileVO fileVO, @RequestParam Map commandMap, ModelMap model) throws Exception { + String atchFileId = (String)commandMap.get("param_atchFileId"); + + fileVO.setAtchFileId(atchFileId); + List result = fileService.selectFileInfs(fileVO); + + model.addAttribute("fileList", result); + model.addAttribute("updateFlag", "N"); + model.addAttribute("fileListCnt", result.size()); + model.addAttribute("atchFileId", atchFileId); + + return "egovframework/com/cmm/fms/EgovFileList"; + } + + /** + * 첨부파일 변경을 위한 수정페이지로 이동한다. + * + * @param fileVO + * @param atchFileId + * @param sessionVO + * @param model + * @return + * @throws Exception + */ + @RequestMapping("/cmm/fms/selectFileInfsForUpdate.do") + public String selectFileInfsForUpdate(@ModelAttribute("searchVO") FileVO fileVO, @RequestParam Map commandMap, + //SessionVO sessionVO, + ModelMap model) throws Exception { + + String atchFileId = (String)commandMap.get("param_atchFileId"); + + fileVO.setAtchFileId(atchFileId); + + List result = fileService.selectFileInfs(fileVO); + + model.addAttribute("fileList", result); + model.addAttribute("updateFlag", "Y"); + model.addAttribute("fileListCnt", result.size()); + model.addAttribute("atchFileId", atchFileId); + + return "egovframework/com/cmm/fms/EgovFileList"; + } + + /** + * 첨부파일에 대한 삭제를 처리한다. + * + * @param fileVO + * @param returnUrl + * @param sessionVO + * @param model + * @return + * @throws Exception + */ + @RequestMapping("/cmm/fms/deleteFileInfs.do") + public String deleteFileInf(@ModelAttribute("searchVO") FileVO fileVO, @RequestParam("returnUrl") String returnUrl, + //SessionVO sessionVO, + HttpServletRequest request, + ModelMap model) throws Exception { + + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + + if (isAuthenticated) { + fileService.deleteFileInf(fileVO); + } + + //-------------------------------------------- + // contextRoot가 있는 경우 제외 시켜야 함 + //-------------------------------------------- + ////return "forward:/cmm/fms/selectFileInfs.do"; + //return "forward:" + returnUrl; + + if ("".equals(request.getContextPath()) || "/".equals(request.getContextPath())) { + return "forward:" + returnUrl; + } + + if (returnUrl.startsWith(request.getContextPath())) { + return "forward:" + returnUrl.substring(returnUrl.indexOf("/", 1)); + } else { + return "forward:" + returnUrl; + } + ////------------------------------------------ + } + + /** + * 이미지 첨부파일에 대한 목록을 조회한다. + * + * @param fileVO + * @param atchFileId + * @param sessionVO + * @param model + * @return + * @throws Exception + */ + @RequestMapping("/cmm/fms/selectImageFileInfs.do") + public String selectImageFileInfs(@ModelAttribute("searchVO") FileVO fileVO, @RequestParam Map commandMap, + //SessionVO sessionVO, + ModelMap model) throws Exception { + + String atchFileId = (String)commandMap.get("atchFileId"); + + fileVO.setAtchFileId(atchFileId); + List result = fileService.selectImageFileList(fileVO); + + model.addAttribute("fileList", result); + + return "egovframework/com/cmm/fms/EgovImgFileList"; + } +} diff --git a/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java b/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java new file mode 100644 index 0000000..0cd6b48 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java @@ -0,0 +1,131 @@ +package egovframework.com.cmm.web; + +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.Map; + +import egovframework.com.cmm.SessionVO; +import egovframework.com.cmm.service.EgovFileMngService; +import egovframework.com.cmm.service.FileVO; +import egovframework.com.cmm.util.EgovResourceCloseHelper; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + + +/** + * @Class Name : EgovImageProcessController.java + * @Description : + * @Modification Information + * + * 수정일 수정자 수정내용 + * ---------- --------- ------------------- + * 2009.04.02 이삼섭 최초생성 + * 2014.03.31 유지보수 fileSn 오류수정 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 4. 2. + * @version + * @see + * + */ +@SuppressWarnings("serial") +@Controller +public class EgovImageProcessController extends HttpServlet { + + @Resource(name = "EgovFileMngService") + private EgovFileMngService fileService; + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovImageProcessController.class); + + /** + * 첨부된 이미지에 대한 미리보기 기능을 제공한다. + * + * @param atchFileId + * @param fileSn + * @param sessionVO + * @param model + * @param response + * @throws Exception + */ + @RequestMapping("/cmm/fms/getImage.do") + public void getImageInf(SessionVO sessionVO, ModelMap model, @RequestParam Map commandMap, HttpServletResponse response) throws Exception { + + //@RequestParam("atchFileId") String atchFileId, + //@RequestParam("fileSn") String fileSn, + String atchFileId = (String)commandMap.get("atchFileId"); + String fileSn = (String)commandMap.get("fileSn"); + + FileVO vo = new FileVO(); + + vo.setAtchFileId(atchFileId); + vo.setFileSn(fileSn); + + //------------------------------------------------------------ + // fileSn이 없는 경우 마지막 파일 참조 + //------------------------------------------------------------ + if (fileSn == null || fileSn.equals("")) { + int newMaxFileSN = fileService.getMaxFileSN(vo); + vo.setFileSn(Integer.toString(newMaxFileSN - 1)); + } + //------------------------------------------------------------ + + FileVO fvo = fileService.selectFileInf(vo); + + //String fileLoaction = fvo.getFileStreCours() + fvo.getStreFileNm(); + + File file = null; + FileInputStream fis = null; + + BufferedInputStream in = null; + ByteArrayOutputStream bStream = null; + + try { + file = new File(fvo.getFileStreCours(), fvo.getStreFileNm()); + fis = new FileInputStream(file); + + in = new BufferedInputStream(fis); + bStream = new ByteArrayOutputStream(); + + int imgByte; + while ((imgByte = in.read()) != -1) { + bStream.write(imgByte); + } + + String type = ""; + + if (fvo.getFileExtsn() != null && !"".equals(fvo.getFileExtsn())) { + if ("jpg".equals(fvo.getFileExtsn().toLowerCase())) { + type = "image/jpeg"; + } else { + type = "image/" + fvo.getFileExtsn().toLowerCase(); + } + type = "image/" + fvo.getFileExtsn().toLowerCase(); + + } else { + LOGGER.debug("Image fileType is null."); + } + + response.setHeader("Content-Type", type); + response.setContentLength(bStream.size()); + + bStream.writeTo(response.getOutputStream()); + + response.getOutputStream().flush(); + response.getOutputStream().close(); + + } finally { + EgovResourceCloseHelper.close(bStream, in, fis); + } + } +} diff --git a/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java b/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java new file mode 100644 index 0000000..f22c397 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java @@ -0,0 +1,130 @@ +package egovframework.com.cmm.web; + +/* + * Copyright 2001-2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the ";License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS"; BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletContext; + +import org.apache.commons.fileupload.FileItem; +import org.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; + +/** + * 실행환경의 파일업로드 처리를 위한 기능 클래스 + * @author 공통서비스개발팀 이삼섭 + * @since 2009.06.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.3.25  이삼섭          최초 생성
    + *   2011.06.11 서준식          스프링 3.0 업그레이드 API변경으로인한 수정
    + *
    + * 
    + */ +public class EgovMultipartResolver extends CommonsMultipartResolver { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovMultipartResolver.class); + + public EgovMultipartResolver() {} + + /** + * 첨부파일 처리를 위한 multipart resolver를 생성한다. + * + * @param servletContext + */ + public EgovMultipartResolver(ServletContext servletContext) { + super(servletContext); + } + + /** + * multipart에 대한 parsing을 처리한다. + */ + @SuppressWarnings("rawtypes") + @Override + protected MultipartParsingResult parseFileItems(List fileItems, String encoding) { + + //스프링 3.0변경으로 수정한 부분 + MultiValueMap multipartFiles = new LinkedMultiValueMap(); + Map multipartParameters = new HashMap(); + + // Extract multipart files and multipart parameters. + for (Iterator it = fileItems.iterator(); it.hasNext();) { + FileItem fileItem = (FileItem)it.next(); + + if (fileItem.isFormField()) { + + String value = null; + if (encoding != null) { + try { + value = fileItem.getString(encoding); + } catch (UnsupportedEncodingException ex) { + LOGGER.warn("Could not decode multipart item '{}' with encoding '{}': using platform default" + , fileItem.getFieldName(), encoding); + value = fileItem.getString(); + } + } else { + value = fileItem.getString(); + } + String[] curParam = (String[])multipartParameters.get(fileItem.getFieldName()); + if (curParam == null) { + // simple form field + multipartParameters.put(fileItem.getFieldName(), new String[] { value }); + } else { + // array of simple form fields + String[] newParam = StringUtils.addStringToArray(curParam, value); + multipartParameters.put(fileItem.getFieldName(), newParam); + } + } else { + + if (fileItem.getSize() > 0) { + // multipart file field + CommonsMultipartFile file = new CommonsMultipartFile(fileItem); + + //스프링 3.0 업그레이드 API변경으로인한 수정 + List fileList = new ArrayList(); + fileList.add(file); + + if (multipartFiles.put(fileItem.getName(), fileList) != null) { // CHANGED!! + throw new MultipartException("Multiple files for field name [" + file.getName() + "] found - not supported by MultipartResolver"); + } + //LOGGER.debug("Found multipart file [{}] of size {} bytes with original filename [{}], stored {}" + //, file.getName(), file.getSize(), file.getOriginalFilename(), file.getStorageDescription()); + } + + } + } + + return new MultipartParsingResult(multipartFiles, multipartParameters, null); + } +} diff --git a/src/main/java/egovframework/com/sym/bat/service/BatchJobListener.java b/src/main/java/egovframework/com/sym/bat/service/BatchJobListener.java new file mode 100644 index 0000000..7eb6f8a --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/BatchJobListener.java @@ -0,0 +1,226 @@ +package egovframework.com.sym.bat.service; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +import egovframework.rte.fdl.idgnr.EgovIdGnrService; + +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.quartz.JobListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 배치작업의 실행시작, 완료를 저장하는 Quartz JobListener 클래스를 정의한다. + * + * @author 김진만 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.08.30   김진만     최초 생성
    + * 
    + */ + +public class BatchJobListener implements JobListener { + + /** egovBatchSchdulService */ + private EgovBatchSchdulService egovBatchSchdulService; + + /** ID Generation */ + private EgovIdGnrService idgenService; + + /** logger */ + private static final Logger LOGGER = LoggerFactory.getLogger(BatchJobListener.class); + + /** + * 배치스케줄 서비스를 설정한다. + * + * @param egovBatchSchdulService the egovBatchSchdulService to set + */ + public void setEgovBatchSchdulService(EgovBatchSchdulService egovBatchSchdulService) { + this.egovBatchSchdulService = 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()); + BatchResult batchResult = new BatchResult(); + 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.setRegmemid("SYSTEM"); + batchResult.setUpdmemid("SYSTEM"); + +// egovBatchSchdulService.insertBatchResult(batchResult); + + // 저장이 이상없이 완료되면 datamap에 배치결과ID를 저장한다. + dataMap.put("batchResultId", batchResult.getBatchResultId()); + +// } catch (IOException e) { +// LOGGER.error("배치스케줄ID : {}, 배치작업ID : {}, 배치결과저장(insert) 에러 : {}", batchResult.getBatchSchdulId(), batchResult.getBatchOpertId(), e.getMessage()); +// LOGGER.debug(e.getMessage(), e); +// } catch (ClassNotFoundException e) { +// LOGGER.error("예외 상황 발생"); + } catch (Exception e) { + LOGGER.error("예외 상황 발생"); + } + } + + /** + * 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; + BatchResult batchResult = new BatchResult(); + 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 { + + Object errorMsg = jobContext.get("errorMsg"); + + // 배치작업이 0이 아닌값을 리턴하면 에러 상황임. + batchResult.setSttus("02"); + batchResult.setErrorInfo("배치작업이 결과값 [" + jobResult + "]를 리턴했습니다. \n" + "배치프로그램 [" + dataMap.getString("batchProgrm") + "]의 로그를 확인하세요. \n" + "에러 메세지 ["+errorMsg+"]"); + } + // 수행중 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.setUpdmemid("SYSTEM"); + + egovBatchSchdulService.updateBatchResult(batchResult); + + // 저장이 이상없이 완료되면 datamap에 배치결과ID를 저장한다. + dataMap.put("batchResultId", batchResult.getBatchResultId()); + + } catch (IOException e) { + LOGGER.error("배치결과ID : {}, 배치스케줄ID : {}, 배치작업ID : {}, 배치결과저장(update) 에러 : {}", batchResult.getBatchResultId(), batchResult.getBatchSchdulId(), + batchResult.getBatchOpertId(), e.getMessage()); + LOGGER.debug(e.getMessage(), e); + } catch (ClassNotFoundException e) { + LOGGER.error("예외 상황 발생"); + } catch (Exception e) { + LOGGER.error("예외 상황 발생"); + } + } + + /** + * 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()); + + BatchResult batchResult = new BatchResult(); + 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.setUpdmemid("SYSTEM"); + + egovBatchSchdulService.updateBatchResult(batchResult); + + // 저장이 이상없이 완료되면 datamap에 배치결과ID를 저장한다. + dataMap.put("batchResultId", batchResult.getBatchResultId()); + + } catch (IOException e) { + LOGGER.error("배치결과ID : {}, 배치스케줄ID : {}, 배치작업ID : {}, 배치결과저장(update) 에러 : {}", batchResult.getBatchResultId(), batchResult.getBatchSchdulId(), + batchResult.getBatchOpertId(), e.getMessage()); + LOGGER.debug(e.getMessage(), e); + } catch (ClassNotFoundException e) { + LOGGER.error("예외 상황 발생"); + } catch (Exception e) { + LOGGER.error("예외 상황 발생"); + } + } +} diff --git a/src/main/java/egovframework/com/sym/bat/service/BatchOpert.java b/src/main/java/egovframework/com/sym/bat/service/BatchOpert.java new file mode 100644 index 0000000..a9a8397 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/BatchOpert.java @@ -0,0 +1,322 @@ +package egovframework.com.sym.bat.service; + +import java.io.Serializable; + +import egovframework.com.cmm.ComDefaultVO; + +/** + * 배치작업관리에 대한 model 클래스 + * + * @author 김진만 + * @since 2010.06.17 + * @version 1.0 + * @updated 17-6-2010 오전 10:27:13 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.06.17   김진만     최초 생성
    + * 
    + */ +public class BatchOpert extends ComDefaultVO implements Serializable { + + private static final long serialVersionUID = -8854151716958649397L; + /** + * 배치작업ID + */ + private String batchOpertId; + /** + * 배치작업명 + */ + private String batchOpertNm; + /** + * 배치프로그램 + */ + private String batchProgrm; + /** + * 배치작업구분 + */ + private String batchOpertDiv; + /** + * 배치작업구분명 + */ + private String batchOpertDivNm; + /** + * 파라미터 + */ + private String paramtr; + /** + * 패키지 + */ + private String batchPackage; + /** + * 메소드 + */ + private String batchMethod; + /** + * 최초등록자 아이디 + */ + private String regmemid; + /** + * 최초등록시점 + */ + private String regdt; + /** + * 최종수정자 아이디 + */ + private String updmemid; + /** + * 최종수정일 + */ + private String upddt; + /** + * 삭제자 아이디 + */ + private String delmemid; + /** + * 삭제일 + */ + private String deldt; + /** + * 삭제여부 + */ + private String delyn; + + /** + * 배치작업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 batchProgrm + */ + public String getBatchProgrm() { + return batchProgrm; + } + + /** + * 배치프로그램을 설정한다. + * @param batchProgrm 설정할 배치프로그램 + */ + public void setBatchProgrm(String batchProgrm) { + this.batchProgrm = batchProgrm; + } + + /** + * 배치작업구분을 리턴한다. + * @return the batchOpertDiv + */ + public String getBatchOpertDiv() { + return batchOpertDiv; + } + + /** + * 배치작업구분을 설정한다. + * @param batchOpertDiv 설정할 배치프로그램 + */ + public void setBatchOpertDiv(String batchOpertDiv) { + this.batchOpertDiv = batchOpertDiv; + } + + /** + * 배치작업구분명을 리턴한다. + * @return the batchOpertDivNm + */ + public String getBatchOpertDivNm() { + return batchOpertDivNm; + } + + /** + * 배치작업구분명을 설정한다. + * @param batchOpertDivNm 설정할 배치프로그램명 + */ + public void setBatchOpertDivNm(String batchOpertDivNm) { + this.batchOpertDivNm = batchOpertDivNm; + } + + /** + * 파라미터를 리턴한다. + * @return the paramtr + */ + public String getParamtr() { + return paramtr; + } + + /** + * 파라미터를 설정한다. + * @param paramtr 설정할 파라미터 + */ + public void setParamtr(String paramtr) { + this.paramtr = paramtr; + } + + /** + * 패키지를 리턴한다. + * @return the batchPackage + */ + public String getBatchPackage() { + return batchPackage; + } + + /** + * 패키지를 설정한다. + * @param batchPackage 설정할 패키지 + */ + public void setBatchPackage(String batchPackage) { + this.batchPackage = batchPackage; + } + + /** + * 메소드를 리턴한다. + * @return the batchMethod + */ + public String getBatchMethod() { + return batchMethod; + } + + /** + * 메소드를 설정한다. + * @param batchMethod 설정할 메소드 + */ + public void setBatchMethod(String batchMethod) { + this.batchMethod = batchMethod; + } + + /** + * @return the regmemid + */ + public String getRegmemid() { + return regmemid; + } + + /** + * @param regmemid the regmemid to set + */ + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + + /** + * @return the regdt + */ + public String getRegdt() { + return regdt; + } + + /** + * @param regdt the regdt to set + */ + public void setRegdt(String regdt) { + this.regdt = regdt; + } + + /** + * 최종수정자ID를 리턴한다. + * @return the updmemid + */ + public String getUpdmemid() { + return updmemid; + } + + /** + * 최종수정자ID를 설정한다. + * @param updmemid 설정할 최종수정자ID + */ + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + + /** + * 최종수정시점을 리턴한다. + * @return the upddt + */ + public String getUpddt() { + return upddt; + } + + /** + * 최종수정시점을 설정한다. + * @param upddt 설정할 최종수정시점 + */ + public void setUpddt(String upddt) { + this.upddt = upddt; + } + + /** + * 삭제자ID를 리턴한다. + * @return the delmemid + */ + public String getDelmemid() { + return delmemid; + } + + /** + * 삭제자ID를 설정한다. + * @param updmemid 설정할 삭제자ID + */ + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + + /** + * 삭제시점을 리턴한다. + * @return the deldt + */ + public String getDeldt() { + return deldt; + } + + /** + * 삭제시점을 설정한다. + * @param upddt 설정할 삭제시점 + */ + public void setDeldt(String deldt) { + this.deldt = deldt; + } + + /** + * 삭제여부를 리턴한다. + * @return the delyn + */ + public String getDelyn() { + return delyn; + } + + /** + * 삭제여부를 설정한다. + * @param delyn 설정할 사용여부 + */ + public void setDelyn(String delyn) { + this.delyn = delyn; + } +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/sym/bat/service/BatchResult.java b/src/main/java/egovframework/com/sym/bat/service/BatchResult.java new file mode 100644 index 0000000..2b5faeb --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/BatchResult.java @@ -0,0 +1,569 @@ +package egovframework.com.sym.bat.service; + +import java.io.IOException; +import java.io.Serializable; + +import egovframework.com.cmm.ComDefaultVO; + +/** + * 배치결과관리에 대한 model 클래스 + * + * @author 김진만 + * @since 2010.06.17 + * @version 1.0 + * @updated 17-6-2010 오전 10:27:13 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.06.17   김진만     최초 생성
    + * 
    + */ +public class BatchResult extends ComDefaultVO implements Serializable { + + private static final long serialVersionUID = 8673713935753272633L; + /** + * 배치결과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 updmemid; + /** + * 최종수정시점 + */ + private String upddt; + /** + * 최초등록자 아이디 + */ + private String regmemid; + /** + * 최초등록시점 + */ + private String regdt; + /** + * 에러정보 + */ + private String errorInfo; + + /** + * 배치작업명 + */ + private String batchOpertNm; + /** + * 배치작업구분 + */ + private String batchOpertDiv; + /** + * 배치작업구분명 + */ + private String batchOpertDivNm; + /** + * 배치프로그램 + */ + private String batchProgrm; + /** + * 상태명 + */ + private String sttusNm; + /** + * 삭제자 아이디 + */ + private String delmemid; + /** + * 삭제일 + */ + private String deldt; + /** + * 삭제여부 + */ + private String delyn; + + private String schOption = ""; + + private String schDate = ""; + + private String schDateFrom = ""; + + private String schDateEnd = ""; + + private String cntOption = ""; + + private String cntYear = ""; + + private String cntMonth = ""; + + private String startDate = ""; + + private String endDate = ""; + + private String cntDate = ""; + + private int cntSum; + + private int cntMethodSucc; + + private int cntMethodFail; + + private int cntBatchSucc; + + private int cntBatchFail; + + private String query = ""; + + private String excelDown = ""; + + /** + * @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 updmemid + */ + public String getUpdmemid() { + return updmemid; + } + + /** + * @return the upddt + */ + public String getUpddt() { + return upddt; + } + + /** + * @return the regmemid + */ + public String getRegmemid() { + return regmemid; + } + + /** + * @return the regdt + */ + public String getRegdt() { + return regdt; + } + + /** + * @return the errorInfo + */ + public String getErrorInfo() { + return errorInfo; + } + + /** + * @return the batchOpertNm + */ + public String getBatchOpertNm() { + return batchOpertNm; + } + + /** + * 배치작업구분을 리턴한다. + * @return the batchOpertDiv + */ + public String getBatchOpertDiv() { + return batchOpertDiv; + } + + /** + * 배치작업구분을 설정한다. + * @param batchOpertDiv 설정할 배치프로그램 + */ + public void setBatchOpertDiv(String batchOpertDiv) { + this.batchOpertDiv = batchOpertDiv; + } + + /** + * 배치작업구분명을 리턴한다. + * @return the batchOpertDivNm + */ + public String getBatchOpertDivNm() { + return batchOpertDivNm; + } + + /** + * 배치작업구분명을 설정한다. + * @param batchOpertDivNm 설정할 배치프로그램명 + */ + public void setBatchOpertDivNm(String batchOpertDivNm) { + this.batchOpertDivNm = batchOpertDivNm; + } + + /** + * @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 updmemid the updmemid to set + */ + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + + /** + * @param upddt the upddt to set + */ + public void setUpddt(String upddt) { + this.upddt = upddt; + } + + /** + * @param regmemid the regmemid to set + */ + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + + /** + * @param regdt the regdt to set + */ + public void setRegdt(String regdt) { + this.regdt = regdt; + } + + /** + * @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; + } + + /** + * 삭제자ID를 리턴한다. + * @return the delmemid + */ + public String getDelmemid() { + return delmemid; + } + + /** + * 삭제자ID를 설정한다. + * @param updmemid 설정할 삭제자ID + */ + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + + /** + * 삭제시점을 리턴한다. + * @return the deldt + */ + public String getDeldt() { + return deldt; + } + + /** + * 삭제시점을 설정한다. + * @param upddt 설정할 삭제시점 + */ + public void setDeldt(String deldt) { + this.deldt = deldt; + } + + /** + * 삭제여부를 리턴한다. + * @return the delyn + */ + public String getDelyn() { + return delyn; + } + + /** + * 삭제여부를 설정한다. + * @param delyn 설정할 사용여부 + */ + public void setDelyn(String delyn) { + this.delyn = delyn; + } + + public String getSchOption() { + return schOption; + } + + public void setSchOption(String schOption) { + this.schOption = schOption; + } + + public String getSchDate() { + return schDate; + } + + public void setSchDate(String schDate) { + this.schDate = schDate; + } + + public String getCntOption() { + return cntOption; + } + + public void setCntOption(String cntOption) { + this.cntOption = cntOption; + } + + public String getStartDate() { + return startDate; + } + + public void setStartDate(String startDate) { + this.startDate = startDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } + + public String getCntDate() { + return cntDate; + } + + public void setCntDate(String cntDate) { + this.cntDate = cntDate; + } + + public int getCntSum() { + return cntSum; + } + + public void setCntSum(int cntSum) { + this.cntSum = cntSum; + } + + public int getCntMethodSucc() { + return cntMethodSucc; + } + + public void setCntMethodSucc(int cntMethodSucc) { + this.cntMethodSucc = cntMethodSucc; + } + + public int getCntMethodFail() { + return cntMethodFail; + } + + public void setCntMethodFail(int cntMethodFail) { + this.cntMethodFail = cntMethodFail; + } + + public int getCntBatchSucc() { + return cntBatchSucc; + } + + public void setCntBatchSucc(int cntBatchSucc) { + this.cntBatchSucc = cntBatchSucc; + } + + public int getCntBatchFail() { + return cntBatchFail; + } + + public void setCntBatchFail(int cntBatchFail) { + this.cntBatchFail = cntBatchFail; + } + + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + public String getExcelDown() { + return excelDown; + } + + public void setExcelDown(String excelDown) { + this.excelDown = excelDown; + } + + public String getCntYear() { + return cntYear; + } + + public void setCntYear(String cntYear) { + this.cntYear = cntYear; + } + + public String getCntMonth() { + return cntMonth; + } + + public void setCntMonth(String cntMonth) { + this.cntMonth = cntMonth; + } + + public String getSchDateFrom() { + return schDateFrom; + } + + public void setSchDateFrom(String schDateFrom) { + this.schDateFrom = schDateFrom; + } + + public String getSchDateEnd() { + return schDateEnd; + } + + public void setSchDateEnd(String schDateEnd) { + this.schDateEnd = schDateEnd; + } +} diff --git a/src/main/java/egovframework/com/sym/bat/service/BatchSchdul.java b/src/main/java/egovframework/com/sym/bat/service/BatchSchdul.java new file mode 100644 index 0000000..c0459d2 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/BatchSchdul.java @@ -0,0 +1,632 @@ +package egovframework.com.sym.bat.service; + +import java.io.Serializable; +import java.util.List; + +import egovframework.com.cmm.ComDefaultVO; + +/** + * 배치스케줄관리에 대한 model 클래스 + * + * @author 김진만 + * @since 2010.06.17 + * @version 1.0 + * @updated 17-6-2010 오전 10:27:13 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.06.17   김진만     최초 생성
    + * 
    + */ +@SuppressWarnings("serial") +public class BatchSchdul extends ComDefaultVO implements Serializable { + + /** + * 배치스케줄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 batchOpertNm; + /** + * 배치작업구분 + */ + private String batchOpertDiv; + /** + * 배치작업구분명 + */ + private String batchOpertDivNm; + /** + * 배치프로그램 + */ + private String batchProgrm; + /** + * 파라미터 + */ + private String paramtr; + /** + * 실행주기명 + */ + private String executCycleNm; + /** + * 실행스케줄 + */ + private String executSchdul; + /** + * 실행주기 + */ + private String cycleCode; + /** + * 최초등록자 아이디 + */ + private String regmemid; + /** + * 최초등록시점 + */ + private String regdt; + /** + * 최종수정자 아이디 + */ + private String updmemid; + /** + * 최종수정일 + */ + private String upddt; + /** + * 삭제자 아이디 + */ + private String delmemid; + /** + * 삭제일 + */ + private String deldt; + /** + * 삭제여부 + */ + private String delyn; + + /** + * @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 batchOpertNm + */ + public String getBatchOpertNm() { + return batchOpertNm; + } + + /** + * 배치작업구분을 리턴한다. + * @return the batchOpertDiv + */ + public String getBatchOpertDiv() { + return batchOpertDiv; + } + + /** + * 배치작업구분을 설정한다. + * @param batchOpertDiv 설정할 배치프로그램 + */ + public void setBatchOpertDiv(String batchOpertDiv) { + this.batchOpertDiv = batchOpertDiv; + } + + /** + * 배치작업구분명을 리턴한다. + * @return the batchOpertDivNm + */ + public String getBatchOpertDivNm() { + return batchOpertDivNm; + } + + /** + * 배치작업구분명을 설정한다. + * @param batchOpertDivNm 설정할 배치프로그램명 + */ + public void setBatchOpertDivNm(String batchOpertDivNm) { + this.batchOpertDivNm = batchOpertDivNm; + } + + /** + * @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 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; + } + + /** + * @return the cycleCode + */ + public String getCycleCode() { + return cycleCode; + } + + /** + * @param cycleCode the cycleCode to set + */ + public void setCycleCode(String cycleCode) { + this.cycleCode = cycleCode; + } + + /** + * @return the regmemid + */ + public String getRegmemid() { + return regmemid; + } + + /** + * @param regmemid the regmemid to set + */ + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + + /** + * @return the regdt + */ + public String getRegdt() { + return regdt; + } + + /** + * @param regdt the regdt to set + */ + public void setRegdt(String regdt) { + this.regdt = regdt; + } + + /** + * 최종수정자ID를 리턴한다. + * @return the updmemid + */ + public String getUpdmemid() { + return updmemid; + } + + /** + * 최종수정자ID를 설정한다. + * @param updmemid 설정할 최종수정자ID + */ + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + + /** + * 최종수정시점을 리턴한다. + * @return the upddt + */ + public String getUpddt() { + return upddt; + } + + /** + * 최종수정시점을 설정한다. + * @param upddt 설정할 최종수정시점 + */ + public void setUpddt(String upddt) { + this.upddt = upddt; + } + + /** + * 삭제자ID를 리턴한다. + * @return the delmemid + */ + public String getDelmemid() { + return delmemid; + } + + /** + * 삭제자ID를 설정한다. + * @param updmemid 설정할 삭제자ID + */ + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + + /** + * 삭제시점을 리턴한다. + * @return the deldt + */ + public String getDeldt() { + return deldt; + } + + /** + * 삭제시점을 설정한다. + * @param upddt 설정할 삭제시점 + */ + public void setDeldt(String deldt) { + this.deldt = deldt; + } + + /** + * 삭제여부를 리턴한다. + * @return the delyn + */ + public String getDelyn() { + return delyn; + } + + /** + * 삭제여부를 설정한다. + * @param delyn 설정할 사용여부 + */ + public void setDelyn(String delyn) { + this.delyn = delyn; + } + + /** + * 리스트, 상세화면 화면표시용 실행스케줄속성을 만들어 executSchdul 필드에 저장한다. + * + * @param dfkSeList List형의 요일구분코드정보리스트 + */ + public void makeExecutSchdul(List dfkSeList) { + String executSchdul = ""; + String executSchdulDeNm = ""; + + // 날짜 출력 + if (this.executCycle.equals("01") || this.executCycle.equals("02") || this.executCycle.equals("04") + || this.executCycle.equals("05") || this.executCycle.equals("06") || this.executCycle.equals("07")) { + // 매주, 매일인 경우는 스케줄일자를 사용하지 않는다. + 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 + " "; + } + } + + // 시, 분, 초 출력 + if (this.executCycle.equals("04")) { + executSchdul = "XX:XX:" + this.executSchdulSecnd; + } else if (this.executCycle.equals("05")) { + executSchdul = "XX:"+ this.executSchdulMnt + ":" + this.executSchdulSecnd; + } else if (this.executCycle.equals("06")) { + executSchdul = "XX:"+ this.executSchdulMnt.substring(1) + ":XX"; + } else if (this.executCycle.equals("07")) { + executSchdul = "XX:XX:" + this.executSchdulSecnd.substring(1); + } else { + // 나머지 시분초는 항상출력한다. + executSchdul = executSchdul + this.executSchdulHour + ":" + this.executSchdulMnt + ":" + this.executSchdulSecnd; + } + + // 값지정. + this.executSchdul = executSchdul; + } + + /** + * 실행스케줄을 CronExpression으로 바꿔서 리턴한다. + **/ + public String toCronExpression() { + + String cronExpression = ""; + String cronExpressionS = ""; + String cronExpressionM = ""; + String cronExpression4 = ""; + String cronExpression5 = ""; + + // 초변환 + cronExpressionS = cronExpression + this.executSchdulSecnd; + cronExpression = cronExpression + this.executSchdulSecnd; + + // 분변환 + cronExpressionM = cronExpression + " " + this.executSchdulMnt; + cronExpression = cronExpression + " " + this.executSchdulMnt; + + // 시변환 + cronExpression = cronExpression + " " + this.executSchdulHour; + + // 일변환 + if (this.executCycle.equals("01")) { + // 매일인경우 "*" 출력 + cronExpression = cronExpression + " " + "*"; + + } else if (this.executCycle.equals("02")) { + // 매주인 경우 "?" 출력 + cronExpression = cronExpression + " " + "?"; + + } else if (this.executCycle.equals("04")) { + // 매분(초침 일치)인경우 "*" 출력 + cronExpression4 = cronExpressionS + " " + "* * *";; + cronExpression = ""; + cronExpression = cronExpression4; + + } else if (this.executCycle.equals("05")) { + // 매시간(분침 일치)인경우 "*" 출력 + cronExpression5 = cronExpressionM + " " + "* *";; + cronExpression = ""; + cronExpression = cronExpression5; + + } else if (this.executCycle.equals("06")) { + // 분간격 인경우 "*" 출력 + cronExpression5 = cronExpressionM + " " + "* *";; + cronExpression = ""; + cronExpression = cronExpression5; + + } else if (this.executCycle.equals("07")) { + // 초간격 인경우 "*" 출력 + cronExpression4 = cronExpressionS + " " + "* * *";; + cronExpression = ""; + cronExpression = cronExpression4; + + } else { + // 이외의 경우 그대로 출력 + cronExpression = cronExpression + " " + this.executSchdulDe.substring(6, 8); + } + + // 월변환 + if (this.executCycle.equals("01") || this.executCycle.equals("02") || this.executCycle.equals("03") + || this.executCycle.equals("04") || this.executCycle.equals("05") || this.executCycle.equals("06") || this.executCycle.equals("07")) { + // 매일,매월,매주인경우 "*" 출력 + 매분, 매시간 추가 + 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; + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/sym/bat/service/BatchSchdulDfk.java b/src/main/java/egovframework/com/sym/bat/service/BatchSchdulDfk.java new file mode 100644 index 0000000..f3a4044 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/BatchSchdulDfk.java @@ -0,0 +1,78 @@ +package egovframework.com.sym.bat.service; + +import java.io.Serializable; + +/** + * 배치스케줄요일에 대한 model 클래스 + * + * @author 김진만 + * @version 1.0 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.08.23   김진만     최초 생성
    + * 
    + */ +public class BatchSchdulDfk implements Serializable { + + private static final long serialVersionUID = -4152071306992470303L; + + /** + * 배치스케줄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; + } + + + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/sym/bat/service/BatchScheduler.java b/src/main/java/egovframework/com/sym/bat/service/BatchScheduler.java new file mode 100644 index 0000000..1286b88 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/BatchScheduler.java @@ -0,0 +1,237 @@ +package egovframework.com.sym.bat.service; + +import static org.quartz.CronScheduleBuilder.cronSchedule; +import static org.quartz.JobBuilder.newJob; +import static org.quartz.TriggerBuilder.newTrigger; + +import java.util.List; + +import egovframework.rte.fdl.idgnr.EgovIdGnrService; + +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; + +/** + * Quartz Scheduler를 실행하는 스케줄러 클래스를 정의한다. + * + * @author 김진만 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.08.30   김진만     최초 생성
    + * 
    + */ + +public class BatchScheduler { + + private EgovBatchSchdulService egovBatchSchdulService; + + /** 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 + */ + public void insertBatchSchdul(BatchSchdul batchSchdul) throws Exception { + // Job 만들기 + JobDetail jobDetail = newJob(BatchShellScriptJob.class).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.setEgovBatchSchdulService(egovBatchSchdulService); + listener.setIdgenService(idgenService); + + sched.getListenerManager().addJobListener(listener); + + // 데이터 전달 + jobDetail.getJobDataMap().put("batchOpertId", batchSchdul.getBatchOpertId()); + jobDetail.getJobDataMap().put("batchOpertDiv", batchSchdul.getBatchOpertDiv()); + 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 + */ + public void updateBatchSchdul(BatchSchdul batchSchdul) throws Exception { + // Job 만들기 + JobDetail jobDetail = newJob(BatchShellScriptJob.class).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.setEgovBatchSchdulService(egovBatchSchdulService); + listener.setIdgenService(idgenService); + + sched.getListenerManager().addJobListener(listener); + + // 데이터 전달 + jobDetail.getJobDataMap().put("batchOpertId", batchSchdul.getBatchOpertId()); + jobDetail.getJobDataMap().put("batchOpertDiv", batchSchdul.getBatchOpertDiv()); + 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(BatchSchdul 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; + BatchSchdul searchVO = new BatchSchdul(); + // 모니터링 대상 검색 조건 초기화 + searchVO.setPageIndex(1); + searchVO.setFirstIndex(0); + searchVO.setRecordCountPerPage(RECORD_COUNT_PER_PAGE); + targetList = (List) egovBatchSchdulService.selectBatchSchdulList(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.setEgovBatchSchdulService(egovBatchSchdulService); + listener.setIdgenService(idgenService); + + //sched.addGlobalJobListener(listener); + sched.getListenerManager().addJobListener(listener); + + // 스케줄러에 Job, Trigger 등록하기 + BatchSchdul 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 EgovBatchSchdulService getEgovBatchSchdulService() { + return egovBatchSchdulService; + } + + /** + * 배치스케줄 서비스 저장. + * @param egovBatchSchdulService the egovBatchSchdulService to set + */ + public void setEgovBatchSchdulService(EgovBatchSchdulService egovBatchSchdulService) { + this.egovBatchSchdulService = egovBatchSchdulService; + } + + /** + * 배치결과ID 생성서비스 리턴 + * @return the idgenService + */ + public EgovIdGnrService getIdgenService() { + return idgenService; + } + + /** + * 배치결과ID 생성서비스 저장. + * @param idgenService the idgenService to set + */ + public void setIdgenService(EgovIdGnrService idgenService) { + this.idgenService = idgenService; + } +} diff --git a/src/main/java/egovframework/com/sym/bat/service/BatchShellScriptJob.java b/src/main/java/egovframework/com/sym/bat/service/BatchShellScriptJob.java new file mode 100644 index 0000000..35e3671 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/BatchShellScriptJob.java @@ -0,0 +1,172 @@ +package egovframework.com.sym.bat.service; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; + +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[{}] BatchOpert구분 : ", jobContext.getJobDetail().getKey().getName(), dataMap.getString("batchOpertDiv")); +// LOGGER.debug("job[{}] BatchProgram이름 : ", jobContext.getJobDetail().getKey().getName(), dataMap.getString("batchProgrm")); +// LOGGER.debug("job[{}] Parameter이름 : ", jobContext.getJobDetail().getKey().getName(), dataMap.getString("paramtr")); + + //int result; + HashMap resultMap = new HashMap(); + + try { + if(dataMap.getString("batchOpertDiv").equals("1")){//메소드 + resultMap = executeMethod(dataMap.getString("batchProgrm"), dataMap.getString("paramtr")); + } else {//배치프로그램 + resultMap = executeProgram(dataMap.getString("batchProgrm"), dataMap.getString("paramtr")); + } + + // jobContext에 결과값을 저장한다. + jobContext.setResult(Integer.parseInt(String.valueOf(resultMap.get("result")))); + + //jobContext.setErrorMsg(resultMap.get("errorMsg")); + jobContext.put("errorMsg", resultMap.get("errorMsg")); + + } catch (IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException e) { + // TODO Auto-generated catch block +// e.printStackTrace(); + LOGGER.error("예외 상황 발생"); + } + } + + /** + * 시스템에서 특정 쉘프로그램을 실행한다. + * @param batchProgrm 배치실행 메소드 + * @param paramtr 배치실행화일에 전달될 파라미터 + * @return 배치실행화일리턴값(integer) + * @throws ClassNotFoundException + * @throws IllegalAccessException + * @throws InstantiationException + * @throws SecurityException + * @throws NoSuchMethodException + * @throws InvocationTargetException + * @throws IllegalArgumentException + * @exception Exception + */ + private HashMap executeMethod(String batchProgrm, String paramtr) throws IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException { + + HashMap resultMap = new HashMap(); + + Class noparams[] = {}; + int result = 0; + try { + +// Process p = null; + String cmdStr = batchProgrm + " " + paramtr; +// p = Runtime.getRuntime().exec(cmdStr); +// p.waitFor(); +// result = p.exitValue(); + + Class cls = Class.forName(batchProgrm); + Object obj = cls.newInstance(); + //call the printIt method + Method method = cls.getDeclaredMethod(paramtr, noparams); + method.invoke(obj, null); +// LOGGER.debug("배치실행화일 - {} 실행완료, 결과값: {}", cmdStr, result); + + resultMap.put("result", result); + resultMap.put("errorMsg", ""); + + } catch (ClassNotFoundException e) { + result = 1; + LOGGER.error("배치스크립트 실행 에러 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + + resultMap.put("result", result); + resultMap.put("errorMsg", e.getMessage()); + + } catch (InstantiationException e) { + result = 1; + LOGGER.error("배치스크립트 실행 에러 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + + resultMap.put("result", result); + resultMap.put("errorMsg", e.getMessage()); + } + + return resultMap; + } + + /** + * 시스템에서 특정 쉘프로그램을 실행한다. + * @param batchProgrm 배치실행 화일 + * @param paramtr 배치실행화일에 전달될 파라미터 + * @return 배치실행화일리턴값(integer) + * @exception Exception + */ + private HashMap executeProgram(String batchProgrm, String paramtr) { + + HashMap resultMap = new HashMap(); + + 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); + + resultMap.put("result", result); + resultMap.put("errorMsg", ""); + + } catch (IOException e) { + result = 1; + LOGGER.error("배치스크립트 실행 에러 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + + resultMap.put("result", result); + resultMap.put("errorMsg", e.getMessage()); + + } catch (InterruptedException e) { + result = 1; + LOGGER.error("배치스크립트 실행 에러 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + + resultMap.put("result", result); + resultMap.put("errorMsg", e.getMessage()); + } + + return resultMap; + } +} diff --git a/src/main/java/egovframework/com/sym/bat/service/EgovBatchOpertService.java b/src/main/java/egovframework/com/sym/bat/service/EgovBatchOpertService.java new file mode 100644 index 0000000..c427110 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/EgovBatchOpertService.java @@ -0,0 +1,74 @@ +package egovframework.com.sym.bat.service; + +import java.util.List; + +/** + * 배치작업관리에 대한 Service Interface를 정의한다. + * + * @author 김진만 + * @since 2010.06.17 + * @version 1.0 + * @updated 17-6-2010 오전 10:27:13 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.06.17   김진만     최초 생성
    + * 
    + */ +public interface EgovBatchOpertService { + + /** + * 배치작업을 삭제한다. + * + * @param batchOpert 삭제대상 배치작업model + * @exception Exception Exception + */ + public void deleteBatchOpert(BatchOpert batchOpert) throws Exception; + + /** + * 배치작업을 등록한다. + * + * @param batchOpert 등록대상 배치작업model + * @exception Exception Exception + */ + public void insertBatchOpert(BatchOpert batchOpert) throws Exception; + + /** + * 배치작업을 상세조회 한다. + * @return 배치작업정보 + * + * @param batchOpert 조회대상 배치작업model + * @exception Exception Exception + */ + public BatchOpert selectBatchOpert(BatchOpert batchOpert) throws Exception; + + /** + * 배치작업 목록을 조회한다. + * @return 배치작업목록 + * + * @param searchVO 조회조건VO + * @exception Exception Exception + */ + public List selectBatchOpertList(BatchOpert searchVO) throws Exception; + + /** + * 배치작업 목록 전체 건수를(을) 조회한다. + * @return 목록건수 + * + * @param searchVO 조회할 정보가 담긴 VO + * @exception Exception Exception + */ + public int selectBatchOpertListCnt(BatchOpert searchVO) throws Exception; + + /** + * 배치작업을 수정한다. + * + * @param batchOpert 수정대상 배치작업model + * @exception Exception Exception + */ + public void updateBatchOpert(BatchOpert batchOpert) throws Exception; + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/sym/bat/service/EgovBatchResultService.java b/src/main/java/egovframework/com/sym/bat/service/EgovBatchResultService.java new file mode 100644 index 0000000..6a5caf0 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/EgovBatchResultService.java @@ -0,0 +1,88 @@ +package egovframework.com.sym.bat.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.ui.ModelMap; +import org.springframework.web.servlet.ModelAndView; + +import egovframework.itgcms.module.link.service.LinkVO; + +/** + * 배치결과관리에 대한 Service Interface를 정의한다. + * + * @author 김진만 + * @since 2010.06.17 + * @version 1.0 + * @updated 17-6-2010 오전 10:27:13 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.06.17   김진만     최초 생성
    + * 
    + */ +public interface EgovBatchResultService { + + /** + * 배치결과을 삭제한다. + * + * @param batchResult 삭제대상 배치결과model + * @exception Exception Exception + */ + public void deleteBatchResult(BatchResult batchResult) throws Exception; + + /** + * 배치결과을 상세조회 한다. + * @return 배치결과정보 + * + * @param batchResult 조회대상 배치결과model + * @exception Exception Exception + */ + public BatchResult selectBatchResult(BatchResult batchResult) throws Exception; + + /** + * 배치결과 목록을 조회한다. + * @return 배치결과목록 + * + * @param searchVO 조회조건VO + * @exception Exception Exception + */ + public List selectBatchResultList(BatchResult searchVO) throws Exception; + + /** + * 배치스케줄 목록 전체 건수를(을) 조회한다. + * @return 목록건수 + * + * @param searchVO 조회할 정보가 담긴 VO + * @exception Exception Exception + */ + public int selectBatchResultListCnt(BatchResult searchVO) throws Exception; + + /** + * 배치 결과 통계 view 조회 서비스 구현 + * @param searchVO + * @param model + * @param request + * @param response + * @throws SQLException + * @throws IOException + */ + public List EgovBatchStatsView(BatchResult searchVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException; + + /** + * 배치 결과 통계 엑셀 다운로드 서비스 구현 + * @param searchVO + * @param request + * @return ModelAndView + * @throws SQLException + * @throws IOException + */ + ModelAndView EgovBatchStatsExcelDown(BatchResult searchVO, HttpServletRequest request) throws SQLException, IOException; +} diff --git a/src/main/java/egovframework/com/sym/bat/service/EgovBatchSchdulService.java b/src/main/java/egovframework/com/sym/bat/service/EgovBatchSchdulService.java new file mode 100644 index 0000000..b1182c9 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/EgovBatchSchdulService.java @@ -0,0 +1,89 @@ +package egovframework.com.sym.bat.service; + +import java.util.List; + +/** + * 배치스케줄관리에 대한 Service Interface를 정의한다. + * + * @author 김진만 + * @since 2010.06.17 + * @version 1.0 + * @updated 17-6-2010 오전 10:27:13 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.06.17   김진만     최초 생성
    + * 
    + */ +public interface EgovBatchSchdulService { + + /** + * 배치스케줄을 삭제한다. + * + * @param batchSchdul 삭제대상 배치스케줄model + * @exception Exception Exception + */ + public void deleteBatchSchdul(BatchSchdul batchSchdul) throws Exception; + + /** + * 배치스케줄을 등록한다. + * + * @param batchSchdul 등록대상 배치스케줄model + * @exception Exception Exception + */ + public void insertBatchSchdul(BatchSchdul batchSchdul) throws Exception; + + /** + * 배치스케줄을 상세조회 한다. + * @return 배치스케줄정보 + * + * @param batchSchdul 조회대상 배치스케줄model + * @exception Exception Exception + */ + public BatchSchdul selectBatchSchdul(BatchSchdul batchSchdul) throws Exception; + + /** + * 배치스케줄 목록을 조회한다. + * @return 배치스케줄목록 + * + * @param searchVO 조회조건VO + * @exception Exception Exception + */ + public List selectBatchSchdulList(BatchSchdul searchVO) throws Exception; + + /** + * 배치스케줄 목록 전체 건수를(을) 조회한다. + * @return 목록건수 + * + * @param searchVO 조회할 정보가 담긴 VO + * @exception Exception Exception + */ + public int selectBatchSchdulListCnt(BatchSchdul searchVO) throws Exception; + + /** + * 배치스케줄을 수정한다. + * + * @param batchSchdul 수정대상 배치스케줄model + * @exception Exception Exception + */ + public void updateBatchSchdul(BatchSchdul batchSchdul) throws Exception; + + /** + * 배치결과를 등록한다. + * @param batchResult 등록대상 배치결과model + * @exception Exception Exception + */ + public void insertBatchResult(BatchResult batchResult) throws Exception; + + /** + * 배치결과정보를 수정한다. + * + * @param batchResult 수정대상 배치결과model + * @exception Exception Exception + */ + public void updateBatchResult(BatchResult batchResult) throws Exception; + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/sym/bat/service/impl/BatchOpertDao.java b/src/main/java/egovframework/com/sym/bat/service/impl/BatchOpertDao.java new file mode 100644 index 0000000..99508b4 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/impl/BatchOpertDao.java @@ -0,0 +1,92 @@ +package egovframework.com.sym.bat.service.impl; + +import java.util.List; + +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; +import egovframework.com.sym.bat.service.BatchOpert; + +import org.springframework.stereotype.Repository; + +/** + * 배치작업관리에 대한 DAO 클래스를 정의한다. + * + * @author 김진만 + * @since 2010.06.17 + * @version 1.0 + * @updated 17-6-2010 오전 10:27:13 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.06.17   김진만     최초 생성
    + * 
    + */ +@Repository("batchOpertDao") +public class BatchOpertDao extends EgovComAbstractDAO { + + /** + * 배치작업을 삭제한다. + * + * @param batchOpert 삭제할 배치작업 VO + * @exception Exception Exception + */ + public void deleteBatchOpert(BatchOpert batchOpert) throws Exception { + delete("BatchOpertDao.deleteBatchOpert", batchOpert); + } + + /** + * 배치작업을 등록한다. + * + * @param batchOpert 저장할 배치작업 VO + * @exception Exception Exception + */ + public void insertBatchOpert(BatchOpert batchOpert) throws Exception { + insert("BatchOpertDao.insertBatchOpert", batchOpert); + } + + /** + * 배치작업정보를 상세조회 한다. + * @return 배치작업정보 + * + * @param batchOpert 조회할 KEY가 있는 배치작업 VO + * @exception Exception Exception + */ + public BatchOpert selectBatchOpert(BatchOpert batchOpert) throws Exception { + return (BatchOpert) select("BatchOpertDao.selectBatchOpert", batchOpert); + } + + /** + * 배치작업정보목록을 조회한다. + * @return 배치작업목록 + * + * @param searchVO 조회조건이 저장된 VO + * @exception Exception Exception + */ + public List selectBatchOpertList(BatchOpert searchVO) throws Exception { + return list("BatchOpertDao.selectBatchOpertList", searchVO); + } + + /** + * 배치작업 목록 전체 건수를(을) 조회한다. + * @return 목록건수 + * + * @param searchVO 조회할 정보가 담긴 VO + * @exception Exception Exception + */ + public int selectBatchOpertListCnt(BatchOpert searchVO) throws Exception { + return (Integer) select("BatchOpertDao.selectBatchOpertListCnt", searchVO); + } + + /** + * 배치작업정보를 수정한다. + * + * @param batchOpert 수정대상 배치작업 VO + * @exception Exception Exception + */ + public void updateBatchOpert(BatchOpert batchOpert) throws Exception { + update("BatchOpertDao.updateBatchOpert", batchOpert); + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/sym/bat/service/impl/BatchResultDao.java b/src/main/java/egovframework/com/sym/bat/service/impl/BatchResultDao.java new file mode 100644 index 0000000..2bdb692 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/impl/BatchResultDao.java @@ -0,0 +1,104 @@ +package egovframework.com.sym.bat.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; +import egovframework.com.sym.bat.service.BatchResult; +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.module.link.service.LinkVO; + +import org.springframework.stereotype.Repository; + +/** + * 배치결과관리에 대한 DAO 클래스를 정의한다. + * + * @author 김진만 + * @since 2010.06.17 + * @version 1.0 + * @updated 17-6-2010 오전 10:27:13 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.06.17   김진만     최초 생성
    + * 
    + */ +@Repository("batchResultDao") +public class BatchResultDao extends EgovComAbstractDAO { + + /** + * 배치결과을 삭제한다. + * + * @param batchResult 삭제할 배치결과 VO + * @exception Exception Exception + */ + public void deleteBatchResult(BatchResult batchResult) throws Exception { + delete("BatchResultDao.deleteBatchResult", batchResult); + } + + /** + * 배치결과을 등록한다. + * + * @param batchResult 저장할 배치결과 VO + * @exception Exception Exception + */ + public void insertBatchResult(BatchResult batchResult) throws Exception { + insert("BatchResultDao.insertBatchResult", batchResult); + } + + /** + * 배치결과정보를 상세조회 한다. + * @return 배치결과정보 + * + * @param batchResult 조회할 KEY가 있는 배치결과 VO + * @exception Exception Exception + */ + public BatchResult selectBatchResult(BatchResult batchResult) throws Exception { + return (BatchResult) select("BatchResultDao.selectBatchResult", batchResult); + } + + /** + * 배치결과정보목록을 조회한다. + * @return 배치결과목록 + * + * @param searchVO 조회조건이 저장된 VO + * @exception Exception Exception + */ + public List selectBatchResultList(BatchResult searchVO) throws Exception { + return list("BatchResultDao.selectBatchResultList", searchVO); + } + + /** + * 배치결과 목록 전체 건수를(을) 조회한다. + * @return 목록건수 + * + * @param searchVO 조회할 정보가 담긴 VO + * @exception Exception Exception + */ + public int selectBatchResultListCnt(BatchResult searchVO) throws Exception { + return (Integer) select("BatchResultDao.selectBatchResultListCnt", searchVO); + } + + /** + * 배치결과정보를 수정한다. + * + * @param batchResult 수정대상 배치결과 VO + * @exception Exception Exception + */ + public void updateBatchResult(BatchResult batchResult) throws Exception { + update("BatchResultDao.updateBatchResult", batchResult); + } + + /** + * 배치 결과 통계 View 조회 + * @param linkVO + * @return List + * @throws SQLException + */ + public List selectBatchStatsView(BatchResult searchVO) throws SQLException{ + return (List) list("BatchResultDao.selectBatchStatsView", searchVO); + } +} diff --git a/src/main/java/egovframework/com/sym/bat/service/impl/BatchSchdulDao.java b/src/main/java/egovframework/com/sym/bat/service/impl/BatchSchdulDao.java new file mode 100644 index 0000000..f8297b5 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/impl/BatchSchdulDao.java @@ -0,0 +1,153 @@ +package egovframework.com.sym.bat.service.impl; +import java.util.List; + +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; +import egovframework.com.sym.bat.service.BatchOpert; +import egovframework.com.sym.bat.service.BatchSchdul; +import egovframework.com.sym.bat.service.BatchSchdulDfk; + +import org.springframework.stereotype.Repository; + +/** + * 배치스케줄관리에 대한 DAO 클래스를 정의한다. + * + * @author 김진만 + * @since 2010.06.17 + * @version 1.0 + * @updated 17-6-2010 오전 10:27:13 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.06.17   김진만     최초 생성
    + * 
    + */ +@Repository("batchSchdulDao") +public class BatchSchdulDao extends EgovComAbstractDAO { + + /** + * 배치스케줄을 삭제한다. + * + * @param batchSchdul 삭제할 배치스케줄 VO + * @exception Exception Exception + */ + public void deleteBatchSchdul(BatchSchdul batchSchdul) + throws Exception{ + // slave 테이블 삭제 + delete("BatchSchdulDao.deleteBatchSchdulDfk", batchSchdul.getBatchSchdulId()); + // master 테이블 삭제 + delete("BatchSchdulDao.deleteBatchSchdul", batchSchdul); + } + + /** + * 배치스케줄을 등록한다. + * + * @param batchSchdul 저장할 배치스케줄 VO + * @exception Exception Exception + */ + public void insertBatchSchdul(BatchSchdul batchSchdul) + throws Exception{ + // master 테이블 인서트 + insert("BatchSchdulDao.insertBatchSchdul", batchSchdul); + // slave 테이블 인서트 + if (batchSchdul.getExecutSchdulDfkSes() != null && batchSchdul.getExecutSchdulDfkSes().length != 0) { + String batchSchdulId = batchSchdul.getBatchSchdulId(); + String [] dfkSes = batchSchdul.getExecutSchdulDfkSes(); + for (int i = 0; i < dfkSes.length; i++) { + BatchSchdulDfk batchSchdulDfk = new BatchSchdulDfk(); + batchSchdulDfk.setBatchSchdulId(batchSchdulId); + batchSchdulDfk.setExecutSchdulDfkSe(dfkSes[i]); + insert("BatchSchdulDao.insertBatchSchdulDfk", batchSchdulDfk); + } + } + } + + /** + * 배치스케줄정보를 상세조회 한다. + * @return 배치스케줄정보 + * + * @param batchSchdul 조회할 KEY가 있는 배치스케줄 VO + * @exception Exception Exception + */ + @SuppressWarnings("unchecked") + public BatchSchdul selectBatchSchdul(BatchSchdul batchSchdul) + throws Exception{ + BatchSchdul result = (BatchSchdul)select("BatchSchdulDao.selectBatchSchdul", batchSchdul); + // 스케줄요일정보를 가져온다. + List dfkSeList = (List) list("BatchSchdulDao.selectBatchSchdulDfkList", result.getBatchSchdulId()); + String [] dfkSes = new String [dfkSeList.size()]; + for (int j = 0; j < dfkSeList.size(); j++) { + dfkSes[j] = dfkSeList.get(j).getExecutSchdulDfkSe(); + } + result.setExecutSchdulDfkSes(dfkSes); + // 화면표시용 실행스케줄 속성을 만든다. + result.makeExecutSchdul(dfkSeList); + + return result ; + } + + /** + * 배치스케줄정보목록을 조회한다. + * @return 배치스케줄목록 + * + * @param searchVO 조회조건이 저장된 VO + * @exception Exception Exception + */ + @SuppressWarnings("unchecked") + public List selectBatchSchdulList(BatchSchdul searchVO) + throws Exception{ + List resultList = list("BatchSchdulDao.selectBatchSchdulList", searchVO); + + for (int i = 0; i < resultList.size(); i++) { + BatchSchdul result = (BatchSchdul) resultList.get(i); + // 스케줄요일정보를 가져온다. + List dfkSeList = (List) list("BatchSchdulDao.selectBatchSchdulDfkList", result.getBatchSchdulId()); + String [] dfkSes = new String [dfkSeList.size()]; + for (int j = 0; j < dfkSeList.size(); j++) { + dfkSes[j] = dfkSeList.get(j).getExecutSchdulDfkSe(); + } + result.setExecutSchdulDfkSes(dfkSes); + // 화면표시용 실행스케줄 속성을 만든다. + result.makeExecutSchdul(dfkSeList); + } + return resultList; + } + + /** + * 배치스케줄 목록 전체 건수를(을) 조회한다. + * @return 목록건수 + * + * @param searchVO 조회할 정보가 담긴 VO + * @exception Exception Exception + */ + public int selectBatchSchdulListCnt(BatchSchdul searchVO) + throws Exception{ + return (Integer)select("BatchSchdulDao.selectBatchSchdulListCnt", searchVO); + } + + /** + * 배치스케줄정보를 수정한다. + * + * @param batchSchdul 수정대상 배치스케줄 VO + * @exception Exception Exception + */ + public void updateBatchSchdul(BatchSchdul batchSchdul) + throws Exception{ + update("BatchSchdulDao.updateBatchSchdul", batchSchdul); + // slave 테이블 삭제 + delete("BatchSchdulDao.deleteBatchSchdulDfk", batchSchdul.getBatchSchdulId()); + // slave 테이블 인서트 + if (batchSchdul.getExecutSchdulDfkSes() != null && batchSchdul.getExecutSchdulDfkSes().length != 0) { + String batchSchdulId = batchSchdul.getBatchSchdulId(); + String [] dfkSes = batchSchdul.getExecutSchdulDfkSes(); + for (int i = 0; i < dfkSes.length; i++) { + BatchSchdulDfk batchSchdulDfk = new BatchSchdulDfk(); + batchSchdulDfk.setBatchSchdulId(batchSchdulId); + batchSchdulDfk.setExecutSchdulDfkSe(dfkSes[i]); + insert("BatchSchdulDao.insertBatchSchdulDfk", batchSchdulDfk); + } + } + } +} diff --git a/src/main/java/egovframework/com/sym/bat/service/impl/EgovBatchOpertServiceImpl.java b/src/main/java/egovframework/com/sym/bat/service/impl/EgovBatchOpertServiceImpl.java new file mode 100644 index 0000000..bb14e2f --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/impl/EgovBatchOpertServiceImpl.java @@ -0,0 +1,108 @@ +package egovframework.com.sym.bat.service.impl; + +import java.util.List; + +import egovframework.com.sym.bat.service.BatchOpert; +import egovframework.com.sym.bat.service.EgovBatchOpertService; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +/** + * 배치작업관리에 대한 ServiceImpl 클래스를 정의한다. + * + * @author 김진만 + * @since 2010.06.17 + * @version 1.0 + * @updated 17-6-2010 오전 10:27:13 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.06.17   김진만     최초 생성
    + * 
    + */ +@Service("egovBatchOpertService") +public class EgovBatchOpertServiceImpl extends EgovAbstractServiceImpl implements EgovBatchOpertService { + + /** + * 배치작업DAO + */ + @Resource(name = "batchOpertDao") + private BatchOpertDao dao; + + /** + * 배치작업을 삭제한다. + * @param batchOpert 삭제대상 배치작업model + * @exception Exception Exception + */ + @Override + public void deleteBatchOpert(BatchOpert batchOpert) throws Exception { + dao.deleteBatchOpert(batchOpert); + } + + /** + * 배치작업을 등록한다. + * @param batchOpert 등록대상 배치작업model + * @exception Exception Exception + */ + @Override + public void insertBatchOpert(BatchOpert batchOpert) throws Exception { + dao.insertBatchOpert(batchOpert); + } + + /** + * 배치작업을 상세조회 한다. + * @return 배치작업정보 + * + * @param batchOpert 조회대상 배치작업model + * @exception Exception Exception + */ + @Override + public BatchOpert selectBatchOpert(BatchOpert batchOpert) throws Exception { + return dao.selectBatchOpert(batchOpert); + } + + /** + * 배치작업의 목록을 조회 한다. + * @return 배치작업목록 + * + * @param searchVO 조회정보가 담긴 VO + * @exception Exception Exception + */ + @Override + public List selectBatchOpertList(BatchOpert searchVO) throws Exception { + List result = dao.selectBatchOpertList(searchVO); + return result; + } + + /** + * 배치작업 목록 전체 건수를(을) 조회한다. + * @return 목록건수 + * + * @param searchVO 조회할 정보가 담긴 VO + * @exception Exception Exception + */ + @Override + public int selectBatchOpertListCnt(BatchOpert searchVO) throws Exception { + int cnt = dao.selectBatchOpertListCnt(searchVO); + return cnt; + } + + /** + * 배치작업정보를 수정한다. + * + * @param batchOpert 수정대상 배치작업model + * @exception Exception Exception + */ + @Override + public void updateBatchOpert(BatchOpert batchOpert) throws Exception { + dao.updateBatchOpert(batchOpert); + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/sym/bat/service/impl/EgovBatchResultServiceImpl.java b/src/main/java/egovframework/com/sym/bat/service/impl/EgovBatchResultServiceImpl.java new file mode 100644 index 0000000..3a37374 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/impl/EgovBatchResultServiceImpl.java @@ -0,0 +1,240 @@ +package egovframework.com.sym.bat.service.impl; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.Calendar; +import java.util.List; +import java.util.Map; + +import egovframework.com.sym.bat.service.BatchResult; +import egovframework.com.sym.bat.service.EgovBatchResultService; +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.util.CommUtil; +import egovframework.itgcms.util.ExcelDownloadView; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Service; +import org.springframework.ui.ModelMap; +import org.springframework.web.servlet.ModelAndView; + +/** + * 배치결과관리에 대한 ServiceImpl 클래스를 정의한다. + * + * @author 김진만 + * @since 2010.06.17 + * @version 1.0 + * @updated 17-6-2010 오전 10:27:13 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.06.17   김진만     최초 생성
    + * 
    + */ +@Service("egovBatchResultService") +public class EgovBatchResultServiceImpl extends EgovAbstractServiceImpl implements EgovBatchResultService { + + /** + * 배치결과DAO + */ + @Resource(name = "batchResultDao") + private BatchResultDao dao; + + /** + * 배치결과을 삭제한다. + * @param batchResult 삭제대상 배치결과model + * @exception Exception Exception + */ + @Override + public void deleteBatchResult(BatchResult batchResult) throws Exception { + dao.deleteBatchResult(batchResult); + } + + /** + * 배치결과을 상세조회 한다. + * @return 배치결과정보 + * + * @param batchResult 조회대상 배치결과model + * @exception Exception Exception + */ + @Override + public BatchResult selectBatchResult(BatchResult batchResult) throws Exception { + return dao.selectBatchResult(batchResult); + } + + /** + * 배치결과의 목록을 조회 한다. + * @return 배치결과목록 + * + * @param searchVO 조회정보가 담긴 VO + * @exception Exception Exception + */ + @Override + public List selectBatchResultList(BatchResult searchVO) throws Exception { + List result = dao.selectBatchResultList(searchVO); + return result; + } + + /** + * 배치스케줄 목록 전체 건수를(을) 조회한다. + * @return 목록건수 + * + * @param searchVO 조회할 정보가 담긴 VO + * @exception Exception Exception + */ + @Override + public int selectBatchResultListCnt(BatchResult searchVO) throws Exception { + int cnt = dao.selectBatchResultListCnt(searchVO); + return cnt; + } + + @Override + public List EgovBatchStatsView(BatchResult searchVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException { + //배치 결과 통계 List 조회 서비스 구현 + if("".equals(searchVO.getSchOption())){ + searchVO.setSchOption("DAY_M"); + } + + String schDate = CommUtil.isNull(searchVO.getSchDate(), ""); + if("".equals(schDate)){ + schDate = CommUtil.getDatePattern("yyyy-MM-dd"); + } + + String date = CommUtil.getDateforStat(schDate, searchVO.getSchOption()); + + searchVO.setSchDateFrom(date); + searchVO.setSchDateEnd(date); + + String dateArr[] = date.split("-"); +// String dateEndArr[] = dateEnd.split("-"); + + if("DAY_M".equals(searchVO.getSchOption())) { + + searchVO.setCntOption("DAY"); + searchVO.setCntYear(dateArr[0]); + searchVO.setCntMonth(dateArr[1]); + searchVO.setSchDate(dateArr[0]+"-"+dateArr[1]); + searchVO.setStartDate(dateArr[0]+"-"+dateArr[1]); + searchVO.setEndDate(dateArr[0]+"-"+dateArr[1]); + + } else if("MONTH".equals(searchVO.getSchOption())) { + + searchVO.setCntOption("MONTH"); +// searchVO.setStartDate(dateArr[0]); +//// int lastDate = Integer.parseInt(dateEndArr[0])+1; +// int lastDate = Integer.parseInt(dateArr[0]); +// String lastDateStr = ""; +// if(lastDate<10){ +// lastDateStr += "0"+lastDate; +// } else { +// lastDateStr += lastDate; +// } +// searchVO.setEndDate(lastDateStr); + + searchVO.setCntYear(dateArr[0]); + searchVO.setSchDate(dateArr[0]); + searchVO.setStartDate(dateArr[0]); + searchVO.setEndDate(dateArr[0]); + + } else if("YEAR".equals(searchVO.getSchOption())) { + + searchVO.setCntOption("YEAR"); + searchVO.setCntYear(dateArr[0]); + searchVO.setSchDate(dateArr[0]); + searchVO.setStartDate(dateArr[0]); + searchVO.setEndDate(dateArr[0]); + } + + List resultList = dao.selectBatchStatsView(searchVO); + + model.addAttribute("resultList", resultList); + + return resultList; + } + + @Override + public ModelAndView EgovBatchStatsExcelDown(BatchResult searchVO, HttpServletRequest request) throws SQLException, IOException { + //배치 결과 통계 엑셀 다운로드 서비스 구현 + ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); + + Map paramMap = CommUtil.getParameterMap(request); + + /************************ S: 출력목록 ************************/ + if("".equals(searchVO.getSchOption())){ + searchVO.setSchOption("DAY_M"); + } + + String schDate = CommUtil.isNull(searchVO.getSchDate(), ""); + if("".equals(schDate)){ + schDate = CommUtil.getDatePattern("yyyy-MM-dd"); + } + + String date = CommUtil.getDateforStat(schDate, searchVO.getSchOption()); + String cntOptName = ""; + String cntOptTitle = ""; + + String dateArr[] = date.split("-"); + + if("DAY_M".equals(searchVO.getSchOption())) { + + cntOptName = "일단위"; + cntOptTitle = "일자"; + searchVO.setCntOption("DAY"); + searchVO.setCntYear(dateArr[0]); + searchVO.setCntMonth(dateArr[1]); + searchVO.setSchDate(dateArr[0]+"-"+dateArr[1]); + searchVO.setStartDate(dateArr[0]+"-"+dateArr[1]); + searchVO.setEndDate(dateArr[0]+"-"+dateArr[1]); + + } else if("MONTH".equals(searchVO.getSchOption())) { + + cntOptName = "월단위"; + cntOptTitle = "월"; + searchVO.setCntOption("MONTH"); + searchVO.setCntYear(dateArr[0]); + searchVO.setSchDate(dateArr[0]); + searchVO.setStartDate(dateArr[0]); + searchVO.setEndDate(dateArr[0]); + + } else if("YEAR".equals(searchVO.getSchOption())) { + + cntOptName = "년단위"; + cntOptTitle = "년"; + searchVO.setCntOption("YEAR"); + searchVO.setCntYear(dateArr[0]); + searchVO.setSchDate(dateArr[0]); + searchVO.setStartDate(dateArr[0]); + searchVO.setEndDate(dateArr[0]); + } + + List resultList = dao.selectBatchStatsView(searchVO); + /************************ E: 출력목록 ************************/ + + /************************ S: 엑셀출력목록저장 ************************/ + paramMap.put("dataList", resultList); + paramMap.put("cntOption", searchVO.getCntOption()); + //시작일~종료일 + paramMap.put("startDate", date); + paramMap.put("endDate", date); + paramMap.put("schDate", date); + paramMap.put("cntOptName", cntOptName); + paramMap.put("cntOptTitle", cntOptTitle); + + //엑셀 템플릿에 넘겨줄 데이타 + mav.addObject("data", paramMap); + + //다운로드에 사용되어질 엑셀파일 템플릿 + mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, CommUtil.getExcelTemplateName(request, "mngr")); + + //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) + mav.addObject(ExcelDownloadView.DOWN_FILE_NM, "배치 결과 통계("+searchVO.getCntOption()+")_"+ CommUtil.getDatePattern("yyyy-MM-dd")); + + return mav; + } +} diff --git a/src/main/java/egovframework/com/sym/bat/service/impl/EgovBatchSchdulServiceImpl.java b/src/main/java/egovframework/com/sym/bat/service/impl/EgovBatchSchdulServiceImpl.java new file mode 100644 index 0000000..e9bce2c --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/service/impl/EgovBatchSchdulServiceImpl.java @@ -0,0 +1,135 @@ +package egovframework.com.sym.bat.service.impl; + +import java.util.List; + +import egovframework.com.sym.bat.service.BatchResult; +import egovframework.com.sym.bat.service.BatchSchdul; +import egovframework.com.sym.bat.service.EgovBatchSchdulService; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +/** + * 배치스케줄관리에 대한 ServiceImpl 클래스를 정의한다. + * + * @author 김진만 + * @since 2010.06.17 + * @version 1.0 + * @updated 17-6-2010 오전 10:27:13 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.06.17   김진만     최초 생성
    + * 
    + */ +@Service("egovBatchSchdulService") +public class EgovBatchSchdulServiceImpl extends EgovAbstractServiceImpl implements EgovBatchSchdulService { + + /** + * 배치스케줄DAO + */ + @Resource(name = "batchSchdulDao") + private BatchSchdulDao batchSchdulDao; + + /** + * 배치결과DAO + */ + @Resource(name = "batchResultDao") + private BatchResultDao batchResultDao; + + /** + * 배치스케줄을 삭제한다. + * @param batchSchdul 삭제대상 배치스케줄model + * @exception Exception Exception + */ + @Override + public void deleteBatchSchdul(BatchSchdul batchSchdul) throws Exception { + batchSchdulDao.deleteBatchSchdul(batchSchdul); + } + + /** + * 배치스케줄을 등록한다. + * @param batchSchdul 등록대상 배치스케줄model + * @exception Exception Exception + */ + @Override + public void insertBatchSchdul(BatchSchdul batchSchdul) throws Exception { + batchSchdulDao.insertBatchSchdul(batchSchdul); + } + + /** + * 배치스케줄을 상세조회 한다. + * @return 배치스케줄정보 + * + * @param batchSchdul 조회대상 배치스케줄model + * @exception Exception Exception + */ + @Override + public BatchSchdul selectBatchSchdul(BatchSchdul batchSchdul) throws Exception { + return batchSchdulDao.selectBatchSchdul(batchSchdul); + } + + /** + * 배치스케줄의 목록을 조회 한다. + * @return 배치스케줄목록 + * + * @param searchVO 조회정보가 담긴 VO + * @exception Exception Exception + */ + @Override + public List selectBatchSchdulList(BatchSchdul searchVO) throws Exception { + List result = batchSchdulDao.selectBatchSchdulList(searchVO); + return result; + } + + /** + * 배치스케줄 목록 전체 건수를(을) 조회한다. + * @return 목록건수 + * + * @param searchVO 조회할 정보가 담긴 VO + * @exception Exception Exception + */ + @Override + public int selectBatchSchdulListCnt(BatchSchdul searchVO) throws Exception { + int cnt = batchSchdulDao.selectBatchSchdulListCnt(searchVO); + return cnt; + } + + /** + * 배치스케줄정보를 수정한다. + * + * @param batchSchdul 수정대상 배치스케줄model + * @exception Exception Exception + */ + @Override + public void updateBatchSchdul(BatchSchdul batchSchdul) throws Exception { + batchSchdulDao.updateBatchSchdul(batchSchdul); + } + + /** + * 배치결과를 등록한다. + * @param batchResult 등록대상 배치결과model + * @exception Exception Exception + */ + @Override + public void insertBatchResult(BatchResult batchResult) throws Exception { + batchResultDao.insertBatchResult(batchResult); + } + + /** + * 배치결과정보를 수정한다. + * + * @param batchResult 수정대상 배치결과model + * @exception Exception Exception + */ + @Override + public void updateBatchResult(BatchResult batchResult) throws Exception { + batchResultDao.updateBatchResult(batchResult); + } +} diff --git a/src/main/java/egovframework/com/sym/bat/validation/BatchOpertValidator.java b/src/main/java/egovframework/com/sym/bat/validation/BatchOpertValidator.java new file mode 100644 index 0000000..f14716b --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/validation/BatchOpertValidator.java @@ -0,0 +1,63 @@ +package egovframework.com.sym.bat.validation; + +import java.io.File; + +import egovframework.com.sym.bat.service.BatchOpert; + +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.Validator; + +/** + * BatchOpert클래스에대한 validator 클래스. + * common validator가 처리하지 못하는 부분 검사. + * + * @author 김진만 + * @version 1.0 + * @see + *
    + * == 개정이력(Modification Information) ==
    + *
    + *   수정일       수정자           수정내용
    + *  -------     --------    ---------------------------
    + *  2010.08.20   김진만     최초 생성
    + * 
    + */ +@Component("batchOpertValidator") +public class BatchOpertValidator implements Validator { + + /* + * (non-Javadoc) + * @see org.springframework.validation.Validator#supports(java.lang.Class) + */ + @Override + public boolean supports(Class clazz) { + return BatchOpert.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) { + // 배치프로그램으로 지정된 값이 파일로 존재하는지 검사한다. + BatchOpert batchOpert = (BatchOpert) obj; + File file = new File(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}에 접근할 수 없습니다. 파일접근권한을 확인하세요."); + } + + } + +} diff --git a/src/main/java/egovframework/com/sym/bat/web/EgovBatchOpertController.java b/src/main/java/egovframework/com/sym/bat/web/EgovBatchOpertController.java new file mode 100644 index 0000000..e70d73f --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/web/EgovBatchOpertController.java @@ -0,0 +1,276 @@ +package egovframework.com.sym.bat.web; + +import java.util.List; + +import egovframework.com.cmm.EgovMessageSource; +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.annotation.IncludedInfo; +import egovframework.com.cmm.util.EgovUserDetailsHelper; +import egovframework.com.sym.bat.service.BatchOpert; +import egovframework.com.sym.bat.service.EgovBatchOpertService; +import egovframework.com.sym.bat.validation.BatchOpertValidator; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springmodules.validation.commons.DefaultBeanValidator; + +/** + * 배치작업관리에 대한 controller 클래스를 정의한다. + * + * 배치작업관리에 대한 등록, 수정, 삭제, 조회 기능을 제공한다. + * 배치작업관리의 조회기능은 목록조회, 상세조회로 구분된다. + * @author sanguri + * @since 2010.06.17 + * @version 1.0 + * @updated 2018-10-05 + */ + +@Controller +public class EgovBatchOpertController { + + /** egovBatchOpertService */ + @Resource(name = "egovBatchOpertService") + private EgovBatchOpertService egovBatchOpertService; + + /* Property 서비스 */ + @Resource(name = "propertiesService") + private EgovPropertyService propertyService; + + /* 메세지 서비스 */ + @Resource(name = "egovMessageSource") + private EgovMessageSource egovMessageSource; + + /* common validator */ + @Autowired + private DefaultBeanValidator beanValidator; + + /* batchOpert bean validator */ + @Resource(name = "batchOpertValidator") + private BatchOpertValidator batchOpertValidator; + + /** ID Generation */ + @Resource(name = "egovBatchOpertIdGnrService") + private EgovIdGnrService idgenService; + + /** logger */ + private static final Logger LOGGER = LoggerFactory.getLogger(EgovBatchOpertController.class); + + /** + * 배치작업을 삭제한다. + * @return 리턴URL + * + * @param batchOpert 삭제대상 배치작업model + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/deleteBatchOpert.do") + public String deleteBatchOpert(BatchOpert batchOpert, ModelMap model) throws Exception { + + batchOpert.setDelmemid("SYSTEM"); + + egovBatchOpertService.deleteBatchOpert(batchOpert); + +// return "forward:/_mngr_/bat/getBatchOpertList.do"; + return CommUtil.doCompleteUrl(model, "성공", "삭제 되었습니다", "/_mngr_/bat/getBatchOpertList.do"); + } + + /** + * 배치작업을 등록한다. + * @return 리턴URL + * + * @param batchOpert 등록대상 배치작업model + * @param bindingResult BindingResult + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/addBatchOpert.do") + public String insertBatchOpert(BatchOpert batchOpert, BindingResult bindingResult, ModelMap model) throws Exception { + + beanValidator.validate(batchOpert, bindingResult); + + if(batchOpert.getBatchOpertDiv().equals("2")){//배치작업구분 1:메소드, 2:배치프로그램 + batchOpertValidator.validate(batchOpert, bindingResult);//파일 validate + } else { + batchOpert.setBatchProgrm(batchOpert.getBatchPackage()); + batchOpert.setParamtr(batchOpert.getBatchMethod()); + } + + if (bindingResult.hasErrors()) { + return "itgcms/global/module/bat/EgovBatchOpertRegist"; + } else { + batchOpert.setBatchOpertId(idgenService.getNextStringId()); + //아이디 설정 + batchOpert.setRegmemid("SYSTEM"); + batchOpert.setUpdmemid("SYSTEM"); + + egovBatchOpertService.insertBatchOpert(batchOpert); + //Exception 없이 진행시 등록성공메시지 + } +// return "forward:/_mngr_/bat/getBatchOpertList.do"; + return CommUtil.doCompleteUrl(model, "성공", "저장 되었습니다", "/_mngr_/bat/getBatchOpertList.do"); + } + + /** + * 배치작업정보을 상세조회한다. + * @return 리턴URL + * + * @param batchOpert 조회대상 배치작업model + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/getBatchOpert.do") + public String selectBatchOpert(@ModelAttribute("searchVO") BatchOpert batchOpert, ModelMap model) throws Exception { + LOGGER.debug(" 조회조건 : {}", batchOpert); + BatchOpert result = egovBatchOpertService.selectBatchOpert(batchOpert); + model.addAttribute("resultInfo", result); + LOGGER.debug(" 결과값 : {}", result); + + return "itgcms/global/module/bat/EgovBatchOpertDetail"; + } + + /** + * 등록화면을 위한 배치작업정보을 조회한다. + * @return 리턴URL + * + * @param batchOpert 조회대상 배치작업model + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/getBatchOpertForRegist.do") + public String selectBatchOpertForRegist(@ModelAttribute("searchVO") BatchOpert batchOpert, ModelMap model) throws Exception { + model.addAttribute("batchOpert", batchOpert); + + return "itgcms/global/module/bat/EgovBatchOpertRegist"; + } + + /** + * 수정화면을 위한 배치작업정보을 조회한다. + * @return 리턴URL + * + * @param batchOpert 조회대상 배치작업model + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/getBatchOpertForUpdate.do") + public String selectBatchOpertForUpdate(@ModelAttribute("searchVO") BatchOpert batchOpert, ModelMap model) throws Exception { + LOGGER.debug(" 조회조건 : {}", batchOpert); + BatchOpert result = egovBatchOpertService.selectBatchOpert(batchOpert); + + if(result.getBatchOpertDiv().equals("1")){//배치작업구분 1:메소드, 2:배치프로그램 + result.setBatchPackage(result.getBatchProgrm()); + result.setBatchMethod(result.getParamtr()); + } + + model.addAttribute("batchOpert", result); + LOGGER.debug(" 결과값 : {}", result); + + return "itgcms/global/module/bat/EgovBatchOpertUpdt"; + } + + /** + * 배치작업 목록을 조회한다. + * @return 리턴URL + * + * @param searchVO 목록조회조건VO + * @param model ModelMap + * @param popupAt 팝업여부 + * @exception Exception Exception + */ + @SuppressWarnings("unchecked") + @IncludedInfo(name = "배치작업관리", listUrl = "/_mngr_/bat/getBatchOpertList.do", order = 1120, gid = 60) + @RequestMapping("/_mngr_/bat/getBatchOpertList.do") + public String selectBatchOpertList(@ModelAttribute("searchVO") BatchOpert searchVO, ModelMap model, @RequestParam(value = "popupAt", required = false) String popupAt) + throws Exception { + searchVO.setPageUnit(propertyService.getInt("pageUnit")); + searchVO.setPageSize(propertyService.getInt("pageSize")); + + 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) egovBatchOpertService.selectBatchOpertList(searchVO); + int totCnt = egovBatchOpertService.selectBatchOpertListCnt(searchVO); + + paginationInfo.setTotalRecordCount(totCnt); + + model.addAttribute("resultList", resultList); + model.addAttribute("resultCnt", totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + if ("Y".equals(popupAt)) { + // Popup 화면이면 + return "itgcms/global/module/bat/EgovBatchOpertListPopup"; + } else { + // 메인화면 호출이면 + return "itgcms/global/module/bat/EgovBatchOpertList"; + } + } + + /** + * 배치작업을 수정한다. + * @return 리턴URL + * + * @param batchOpert 수정대상 배치작업model + * @param bindingResult BindingResult + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/updateBatchOpert.do") + public String updateBatchOpert(BatchOpert batchOpert, BindingResult bindingResult, ModelMap model) throws Exception { + + beanValidator.validate(batchOpert, bindingResult); + + if(batchOpert.getBatchOpertDiv().equals("2")){//배치작업구분 1:메소드, 2:배치프로그램 + batchOpertValidator.validate(batchOpert, bindingResult);//파일 validate + } else { + batchOpert.setBatchProgrm(batchOpert.getBatchPackage()); + batchOpert.setParamtr(batchOpert.getBatchMethod()); + } + + if (bindingResult.hasErrors()) { + model.addAttribute("batchOpert", batchOpert); + return "itgcms/global/module/bat/EgovBatchOpertUpdt"; + } + + // 정보 업데이트 + batchOpert.setUpdmemid("SYSTEM"); + egovBatchOpertService.updateBatchOpert(batchOpert); + + model.addAttribute("batchOpert", batchOpert); + + //return "forward:/_mngr_/bat/getBatchOpert.do"; + return CommUtil.doCompleteUrl(model, "성공", "수정 되었습니다", "/_mngr_/bat/getBatchOpert.do"); + } + + /** + * 배치작업 조회팝업을 실행한다. + * @return 리턴URL + * + * @param searchVO 목록조회조건VO + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/getBatchOpertListPopup.do") + public String openPopupWindow(@ModelAttribute("searchVO") BatchOpert searchVO, ModelMap model) throws Exception { + return "itgcms/global/module/bat/EgovBatchOpertListPopupFrame"; + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/sym/bat/web/EgovBatchResultController.java b/src/main/java/egovframework/com/sym/bat/web/EgovBatchResultController.java new file mode 100644 index 0000000..05356b0 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/web/EgovBatchResultController.java @@ -0,0 +1,166 @@ +package egovframework.com.sym.bat.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import egovframework.com.cmm.EgovMessageSource; +import egovframework.com.cmm.annotation.IncludedInfo; +import egovframework.com.cmm.util.EgovUserDetailsHelper; +import egovframework.com.sym.bat.service.BatchResult; +import egovframework.com.sym.bat.service.EgovBatchResultService; +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +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.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +/** + * 배치결과관리에 대한 controller 클래스 + * + * @author sanguri + * @since 2010.06.17 + * @version 1.0 + * @updated 2018-10-11 + */ + +@Controller +public class EgovBatchResultController { + + /** egovBatchResultService */ + @Resource(name = "egovBatchResultService") + private EgovBatchResultService egovBatchResultService; + + /* Property 서비스 */ + @Resource(name = "propertiesService") + private EgovPropertyService propertyService; + + /* 메세지 서비스 */ + @Resource(name = "egovMessageSource") + private EgovMessageSource egovMessageSource; + + /** logger */ + private static final Logger LOGGER = LoggerFactory.getLogger(EgovBatchResultController.class); + + /** + * 배치결과을 삭제한다. + * @return 리턴URL + * + * @param batchResult 삭제대상 배치결과model + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/deleteBatchResult.do") + public String deleteBatchResult(BatchResult batchResult, ModelMap model) throws Exception { + + batchResult.setDelmemid("SYSTEM"); + + egovBatchResultService.deleteBatchResult(batchResult); + +// return "forward:/_mngr_/bat/getBatchResultList.do"; + return CommUtil.doCompleteUrl(model, "성공", "삭제 되었습니다", "/_mngr_/bat/getBatchResultList.do"); + } + + /** + * 배치결과정보을 상세조회한다. + * @return 리턴URL + * + * @param batchResult 조회대상 배치결과model + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/getBatchResult.do") + public String selectBatchResult(@ModelAttribute("searchVO") BatchResult batchResult, ModelMap model) throws Exception { + LOGGER.debug(" 조회조건 : {}", batchResult); + BatchResult result = egovBatchResultService.selectBatchResult(batchResult); + model.addAttribute("resultInfo", result); + LOGGER.debug(" 결과값 : {}", result); + + return "itgcms/global/module/bat/EgovBatchResultDetail"; + } + + /** + * 배치결과 목록을 조회한다. + * @return 리턴URL + * + * @param searchVO 목록조회조건VO + * @param model ModelMap + * @exception Exception Exception + */ + @SuppressWarnings("unchecked") + @IncludedInfo(name = "배치결과관리", listUrl = "/_mngr_/bat/getBatchResultList.do", order = 1130, gid = 60) + @RequestMapping("/_mngr_/bat/getBatchResultList.do") + public String selectBatchResultList(@ModelAttribute("searchVO") BatchResult searchVO, ModelMap model) throws Exception { + searchVO.setPageUnit(propertyService.getInt("pageUnit")); + searchVO.setPageSize(propertyService.getInt("pageSize")); + + 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) egovBatchResultService.selectBatchResultList(searchVO); + int totCnt = egovBatchResultService.selectBatchResultListCnt(searchVO); + + paginationInfo.setTotalRecordCount(totCnt); + + model.addAttribute("resultList", resultList); + model.addAttribute("resultCnt", totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "itgcms/global/module/bat/EgovBatchResultList"; + } + + /** + * 배치 결과 통계 view 서비스 구현 + * @param searchVO + * @param model + * @param request + * @param response + * @return String + * @throws IOException + * @throws SQLException + * @throws RuntimeException + */ + @RequestMapping(value = "/_mngr_/bat/EgovBatchStatsView.do") + public String EgovBatchStatsView(@ModelAttribute("searchVO") BatchResult searchVO, ModelMap model, + HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + + List resultList = egovBatchResultService.EgovBatchStatsView(searchVO, model, request, response); + + model.addAttribute("resultList", resultList); + + return "itgcms/global/module/bat/EgovBatchStatsView"; + } + + /** + * 배치 결과 통계 엑셀 다운로드 서비스 구현 + * @param searchVO + * @param request + * @return ModelAndView + * @throws IOException + * @throws SQLException + * @throws RuntimeException + */ + @RequestMapping(value = "/_mngr_/bat/mngrBatchStatsExcelDown.do") + public ModelAndView EgovBatchStatsExcelDown(@ModelAttribute("searchVO") BatchResult searchVO, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + + return egovBatchResultService.EgovBatchStatsExcelDown(searchVO, request); + } +} diff --git a/src/main/java/egovframework/com/sym/bat/web/EgovBatchSchdulController.java b/src/main/java/egovframework/com/sym/bat/web/EgovBatchSchdulController.java new file mode 100644 index 0000000..78bcfc8 --- /dev/null +++ b/src/main/java/egovframework/com/sym/bat/web/EgovBatchSchdulController.java @@ -0,0 +1,322 @@ +package egovframework.com.sym.bat.web; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.EgovMessageSource; +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.annotation.IncludedInfo; +import egovframework.com.cmm.service.CmmnDetailCode; +import egovframework.com.cmm.service.EgovCmmUseService; +import egovframework.com.cmm.util.EgovUserDetailsHelper; +import egovframework.com.sym.bat.service.BatchSchdul; +import egovframework.com.sym.bat.service.BatchScheduler; +import egovframework.com.sym.bat.service.EgovBatchSchdulService; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springmodules.validation.commons.DefaultBeanValidator; + +/** + * 배치스케줄관리에 대한 controller 클래스 + * + * @author sanguri + * @since 2010.06.17 + * @version 1.0 + * @updated 2018-10-10 + */ + +@Controller +public class EgovBatchSchdulController { + + /** egovBatchSchdulService */ + @Resource(name = "egovBatchSchdulService") + private EgovBatchSchdulService egovBatchSchdulService; + + /* Property 서비스 */ + @Resource(name = "propertiesService") + private EgovPropertyService propertyService; + + /* 메세지 서비스 */ + @Resource(name = "egovMessageSource") + private EgovMessageSource egovMessageSource; + + /* common validator */ + @Autowired + private DefaultBeanValidator beanValidator; + + /** ID Generation */ + @Resource(name = "egovBatchSchdulIdGnrService") + private EgovIdGnrService idgenService; + + /** cmmUseService */ + @Resource(name = "EgovCmmUseService") + private EgovCmmUseService cmmUseService; + + /** 배치스케줄러 서비스 */ + @Resource(name = "batchScheduler") + private BatchScheduler batchScheduler; + + /** logger */ + private static final Logger LOGGER = LoggerFactory.getLogger(EgovBatchSchdulController.class); + + /** + * 배치스케줄을 삭제한다. + * @return 리턴URL + * + * @param batchSchdul 삭제대상 배치스케줄model + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/deleteBatchSchdul.do") + public String deleteBatchSchdul(BatchSchdul batchSchdul, ModelMap model) throws Exception { + + batchSchdul.setDelmemid("SYSTEM"); + + // 배치스케줄러에 스케줄정보반영 + batchScheduler.deleteBatchSchdul(batchSchdul); + + egovBatchSchdulService.deleteBatchSchdul(batchSchdul); + +// return "forward:/_mngr_/bat/getBatchSchdulList.do"; + return CommUtil.doCompleteUrl(model, "성공", "삭제 되었습니다", "/_mngr_/bat/getBatchSchdulList.do"); + } + + /** + * 배치스케줄을 등록한다. + * @return 리턴URL + * + * @param batchSchdul 등록대상 배치스케줄model + * @param bindingResult BindingResult + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/addBatchSchdul.do") + public String insertBatchSchdul(BatchSchdul batchSchdul, BindingResult bindingResult, ModelMap model) throws Exception { + LOGGER.debug(" 인서트 대상정보 : {}", batchSchdul); + + beanValidator.validate(batchSchdul, bindingResult); + if (bindingResult.hasErrors()) { + referenceData(model); + return "itgcms/global/module/bat/EgovBatchSchdulRegist"; + } else { + batchSchdul.setBatchSchdulId(idgenService.getNextStringId()); + //아이디 설정 + batchSchdul.setRegmemid("SYSTEM"); + batchSchdul.setUpdmemid("SYSTEM"); + + if(batchSchdul.getExecutCycle().equals("06")){ + batchSchdul.setExecutSchdulMnt("/"+batchSchdul.getExecutSchdulMnt()); + } + if(batchSchdul.getExecutCycle().equals("07")){ + batchSchdul.setExecutSchdulSecnd("/"+batchSchdul.getExecutSchdulSecnd()); + } + egovBatchSchdulService.insertBatchSchdul(batchSchdul); + + // 배치스케줄러에 스케줄정보반영 + BatchSchdul target = egovBatchSchdulService.selectBatchSchdul(batchSchdul); + batchScheduler.insertBatchSchdul(target); + } +// return "forward:/_mngr_/bat/getBatchSchdulList.do"; + return CommUtil.doCompleteUrl(model, "성공", "저장 되었습니다", "/_mngr_/bat/getBatchSchdulList.do"); + } + + /** + * 배치스케줄정보을 상세조회한다. + * @return 리턴URL + * + * @param batchSchdul 조회대상 배치스케줄model + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/getBatchSchdul.do") + public String selectBatchSchdul(@ModelAttribute("searchVO") BatchSchdul batchSchdul, ModelMap model) throws Exception { + LOGGER.debug(" 조회조건 : {}", batchSchdul); + + BatchSchdul result = egovBatchSchdulService.selectBatchSchdul(batchSchdul); + + model.addAttribute("resultInfo", result); + LOGGER.debug(" 결과값 : {}", result); + + return "itgcms/global/module/bat/EgovBatchSchdulDetail"; + } + + /** + * 등록화면을 위한 배치스케줄정보을 조회한다. + * @return 리턴URL + * + * @param batchSchdul 조회대상 배치스케줄model + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/getBatchSchdulForRegist.do") + public String selectBatchSchdulForRegist(@ModelAttribute("searchVO") BatchSchdul batchSchdul, ModelMap model) throws Exception { + referenceData(model); + + model.addAttribute("batchSchdul", batchSchdul); + + return "itgcms/global/module/bat/EgovBatchSchdulRegist"; + } + + /** + * 수정화면을 위한 배치스케줄정보을 조회한다. + * @return 리턴URL + * + * @param batchSchdul 조회대상 배치스케줄model + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/getBatchSchdulForUpdate.do") + public String selectBatchSchdulForUpdate(@ModelAttribute("searchVO") BatchSchdul batchSchdul, ModelMap model) throws Exception { + referenceData(model); + + LOGGER.debug(" 조회조건 : {}", batchSchdul); + BatchSchdul result = egovBatchSchdulService.selectBatchSchdul(batchSchdul); + if(result.getExecutCycle().equals("06")){//분간격 + result.setExecutSchdulMnt(result.getExecutSchdulMnt().substring(1)); + } + if(result.getExecutCycle().equals("07")){//초간격 + result.setExecutSchdulSecnd(result.getExecutSchdulSecnd().substring(1)); + } + model.addAttribute("batchSchdul", result); + LOGGER.debug(" 결과값 : {}", result); + + return "itgcms/global/module/bat/EgovBatchSchdulUpdt"; + } + + /** + * Reference Data 를 설정한다. + * @param model 화면용spring Model객체 + * @throws Exception + */ + private void referenceData(ModelMap model) throws Exception { + ComDefaultCodeVO vo = new ComDefaultCodeVO(); + //DBMS종류코드목록을 코드정보로부터 조회 + vo.setCodeId("COM047"); + List executCycleList = cmmUseService.selectCmmCodeDetail(vo); + model.addAttribute("executCycleList", executCycleList); + //요일구분코드목록을 코드정보로부터 조회 + vo.setCodeId("COM074"); + List executSchdulDfkSeList = cmmUseService.selectCmmCodeDetail(vo); + 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); + } + + /** + * 배치스케줄 목록을 조회한다. + * @return 리턴URL + * + * @param searchVO 목록조회조건VO + * @param model ModelMap + * @exception Exception Exception + */ + @SuppressWarnings("unchecked") + @IncludedInfo(name = "스케줄처리", listUrl = "/_mngr_/bat/getBatchSchdulList.do", order = 1140, gid = 60) + @RequestMapping("/_mngr_/bat/getBatchSchdulList.do") + public String selectBatchSchdulList(@ModelAttribute("searchVO") BatchSchdul searchVO, ModelMap model) throws Exception { + searchVO.setPageUnit(propertyService.getInt("pageUnit")); + searchVO.setPageSize(propertyService.getInt("pageSize")); + + 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) egovBatchSchdulService.selectBatchSchdulList(searchVO); + int totCnt = egovBatchSchdulService.selectBatchSchdulListCnt(searchVO); + + paginationInfo.setTotalRecordCount(totCnt); + + model.addAttribute("resultList", resultList); + model.addAttribute("resultCnt", totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "itgcms/global/module/bat/EgovBatchSchdulList"; + } + + /** + * 배치스케줄을 수정한다. + * @return 리턴URL + * + * @param batchSchdul 수정대상 배치스케줄model + * @param bindingResult BindingResult + * @param model ModelMap + * @exception Exception Exception + */ + @RequestMapping("/_mngr_/bat/updateBatchSchdul.do") + public String updateBatchSchdul(BatchSchdul batchSchdul, BindingResult bindingResult, ModelMap model) throws Exception { + + beanValidator.validate(batchSchdul, bindingResult); + if (bindingResult.hasErrors()) { + referenceData(model); + model.addAttribute("batchSchdul", batchSchdul); + return "itgcms/global/module/bat/EgovBatchSchdulUpdt"; + } + + // 정보 업데이트 + batchSchdul.setUpdmemid("SYSTEM"); + if(batchSchdul.getExecutCycle().equals("06")){ + batchSchdul.setExecutSchdulMnt("/"+batchSchdul.getExecutSchdulMnt()); + } + if(batchSchdul.getExecutCycle().equals("07")){ + batchSchdul.setExecutSchdulSecnd("/"+batchSchdul.getExecutSchdulSecnd()); + } + egovBatchSchdulService.updateBatchSchdul(batchSchdul); + + // 배치스케줄러에 스케줄정보반영 + BatchSchdul target = egovBatchSchdulService.selectBatchSchdul(batchSchdul); + batchScheduler.updateBatchSchdul(target); + + model.addAttribute("batchSchdul", batchSchdul); + +// return "forward:/_mngr_/bat/getBatchSchdul.do"; + return CommUtil.doCompleteUrl(model, "성공", "수정 되었습니다", "/_mngr_/bat/getBatchSchdul.do"); + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/sym/cal/service/EgovCalRestdeManageService.java b/src/main/java/egovframework/com/sym/cal/service/EgovCalRestdeManageService.java new file mode 100644 index 0000000..1e3af27 --- /dev/null +++ b/src/main/java/egovframework/com/sym/cal/service/EgovCalRestdeManageService.java @@ -0,0 +1,132 @@ +package egovframework.com.sym.cal.service; + +import java.util.List; + +/** + * + * 휴일에 관한 서비스 인터페이스 클래스를 정의한다 + * @author 공통서비스 개발팀 이중호 + * @since 2009.04.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.04.01  이중호          최초 생성
    + *
    + * 
    + */ +public interface EgovCalRestdeManageService { + + /** + * 일반달력 팝업 정보를 조회한다. + * @param restde + * @return List(일반달력 팝업 날짜정보) + * @throws Exception + */ + List selectNormalRestdePopup(Restde restde) throws Exception; + + /** + * 행정달력 팝업 정보를 조회한다. + * @param restde + * @return List(행정달력 팝업 날짜정보) + * @throws Exception + */ + List selectAdministRestdePopup(Restde restde) throws Exception; + + /** + * 일반달력 일간 정보를 조회한다. + * @param restde + * @return List(일반달력 일간 날짜정보) + * @throws Exception + */ + List selectNormalDayCal(Restde restde) throws Exception; + + /** + * 일반달력 일간 휴일을 조회한다. + * @param restde + * @return List(일반달력 일간 휴일정보) + * @throws Exception + */ + List selectNormalDayRestde(Restde restde) throws Exception; + + /** + * 일반달력 월간 휴일을 조회한다. + * @param restde + * @return List(일반달력 월간 휴일정보) + * @throws Exception + */ + List selectNormalMonthRestde(Restde restde) throws Exception; + + /** + * 행정달력 일간 정보를 조회한다. + * @param restde + * @return List(행정달력 일간 날짜정보) + * @throws Exception + */ + List selectAdministDayCal(Restde restde) throws Exception; + + /** + * 행정달력 일간 휴일을 조회한다. + * @param restde + * @return List(행정달력 일간 휴일정보) + * @throws Exception + */ + List selectAdministDayRestde(Restde restde) throws Exception; + + /** + * 행정달력 월간 휴일을 조회한다. + * @param restde + * @return List(행정달력 월간 휴일정보) + * @throws Exception + */ + List selectAdministMonthRestde(Restde restde) throws Exception; + + /** + * 휴일을 삭제한다. + * @param restde + * @throws Exception + */ + void deleteRestde(Restde restde) throws Exception; + + /** + * 휴일을 등록한다. + * @param restde + * @throws Exception + */ + void insertRestde(Restde restde) throws Exception; + + /** + * 휴일 상세항목을 조회한다. + * @param restde + * @return Restde(휴일) + * @throws Exception + */ + Restde selectRestdeDetail(Restde restde) throws Exception; + + /** + * 휴일 목록을 조회한다. + * @param searchVO + * @return List(휴일 목록) + * @throws Exception + */ + List selectRestdeList(RestdeVO searchVO) throws Exception; + + /** + * 휴일 총 갯수를 조회한다. + * @param searchVO + * @return int(휴일 총 갯수) + */ + int selectRestdeListTotCnt(RestdeVO searchVO) throws Exception; + + /** + * 휴일을 수정한다. + * @param restde + * @throws Exception + */ + void updateRestde(Restde restde) throws Exception; + +} diff --git a/src/main/java/egovframework/com/sym/cal/service/Restde.java b/src/main/java/egovframework/com/sym/cal/service/Restde.java new file mode 100644 index 0000000..dde9021 --- /dev/null +++ b/src/main/java/egovframework/com/sym/cal/service/Restde.java @@ -0,0 +1,404 @@ +package egovframework.com.sym.cal.service; + +import java.io.Serializable; + +/** + * 휴일 모델 클래스 + * @author 공통서비스 개발팀 이중호 + * @since 2009.04.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.04.01  이중호          최초 생성
    + *
    + * 
    + */ +public class Restde implements Serializable { + + private static final long serialVersionUID = -8509545779844669658L; + + /* + * 휴일번호 + */ + private int restdeNo = 0; + + /* + * 휴일일자 + */ + private String restdeDe = ""; + + /* + * 휴일명 + */ + private String restdeNm = ""; + + /* + * 휴일설명 + */ + private String restdeDc = ""; + + /* + * 휴일구분 + */ + private String restdeSe = ""; + + /* + * 휴일구분코드 + */ + private String restdeSeCode = ""; + + /* + * 최초등록자ID + */ + private String frstRegisterId = ""; + + /* + * 최종수정자ID + */ + private String lastUpdusrId = ""; + + /* + * 년 + */ + private String year = ""; + + /* + * 월 + */ + private String month = ""; + + /* + * 일 + */ + private String day = ""; + + /* + * 휴일여부 + */ + private String restdeAt = ""; + + /* + * 달력셀 + */ + private int cellNum = 0; + + /* + * 월별 주순위 + */ + private int weeks = 0; + + /* + * 월 주수 + */ + private int maxWeeks = 0; + + /* + * 요일 + */ + private int week = 0; + + /* + * 시작요일 + */ + private int startWeekMonth = 0; + + /* + * 마지막 일자 + */ + private int lastDayMonth = 0; + + /** + * restdeNo attribute 를 리턴한다. + * @return int + */ + public int getRestdeNo() { + return restdeNo; + } + + /** + * restdeNo attribute 값을 설정한다. + * @param restdeNo int + */ + public void setRestdeNo(int restdeNo) { + this.restdeNo = restdeNo; + } + + /** + * restdeDe attribute 를 리턴한다. + * @return String + */ + public String getRestdeDe() { + return restdeDe; + } + + /** + * restdeDe attribute 값을 설정한다. + * @param restdeDe String + */ + public void setRestdeDe(String restdeDe) { + this.restdeDe = restdeDe; + } + + /** + * restdeNm attribute 를 리턴한다. + * @return String + */ + public String getRestdeNm() { + return restdeNm; + } + + /** + * restdeNm attribute 값을 설정한다. + * @param restdeNm String + */ + public void setRestdeNm(String restdeNm) { + this.restdeNm = restdeNm; + } + + /** + * restdeDc attribute 를 리턴한다. + * @return String + */ + public String getRestdeDc() { + return restdeDc; + } + + /** + * restdeDc attribute 값을 설정한다. + * @param restdeDc String + */ + public void setRestdeDc(String restdeDc) { + this.restdeDc = restdeDc; + } + + /** + * restdeSe attribute 를 리턴한다. + * @return String + */ + public String getRestdeSe() { + return restdeSe; + } + + /** + * restdeSe attribute 값을 설정한다. + * @param restdeSe String + */ + public void setRestdeSe(String restdeSe) { + this.restdeSe = restdeSe; + } + + /** + * restdeSeCode attribute 를 리턴한다. + * @return String + */ + public String getRestdeSeCode() { + return restdeSeCode; + } + + /** + * restdeSeCode attribute 값을 설정한다. + * @param restdeSeCode String + */ + public void setRestdeSeCode(String restdeSeCode) { + this.restdeSeCode = restdeSeCode; + } + + /** + * 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; + } + + /** + * year attribute 를 리턴한다. + * @return String + */ + public String getYear() { + return year; + } + + /** + * year attribute 값을 설정한다. + * @param year String + */ + public void setYear(String year) { + this.year = year; + } + + /** + * month attribute 를 리턴한다. + * @return String + */ + public String getMonth() { + return month; + } + + /** + * month attribute 값을 설정한다. + * @param month String + */ + public void setMonth(String month) { + this.month = month; + } + + /** + * day attribute 를 리턴한다. + * @return String + */ + public String getDay() { + return day; + } + + /** + * day attribute 값을 설정한다. + * @param day String + */ + public void setDay(String day) { + this.day = day; + } + + /** + * restdeAt attribute 를 리턴한다. + * @return String + */ + public String getRestdeAt() { + return restdeAt; + } + + /** + * restdeAt attribute 값을 설정한다. + * @param restdeAt String + */ + public void setRestdeAt(String restdeAt) { + this.restdeAt = restdeAt; + } + + /** + * cellNum attribute 를 리턴한다. + * @return int + */ + public int getCellNum() { + return cellNum; + } + + /** + * cellNum attribute 값을 설정한다. + * @param cellNum int + */ + public void setCellNum(int cellNum) { + this.cellNum = cellNum; + } + + /** + * weeks attribute 를 리턴한다. + * @return int + */ + public int getWeeks() { + return weeks; + } + + /** + * weeks attribute 값을 설정한다. + * @param weeks int + */ + public void setWeeks(int weeks) { + this.weeks = weeks; + } + + /** + * maxWeeks attribute 를 리턴한다. + * @return int + */ + public int getMaxWeeks() { + return maxWeeks; + } + + /** + * maxWeeks attribute 값을 설정한다. + * @param maxWeeks int + */ + public void setMaxWeeks(int maxWeeks) { + this.maxWeeks = maxWeeks; + } + + /** + * week attribute 를 리턴한다. + * @return int + */ + public int getWeek() { + return week; + } + + /** + * week attribute 값을 설정한다. + * @param week int + */ + public void setWeek(int week) { + this.week = week; + } + + /** + * startWeekMonth attribute 를 리턴한다. + * @return int + */ + public int getStartWeekMonth() { + return startWeekMonth; + } + + /** + * startWeekMonth attribute 값을 설정한다. + * @param startWeekMonth int + */ + public void setStartWeekMonth(int startWeekMonth) { + this.startWeekMonth = startWeekMonth; + } + + /** + * lastDayMonth attribute 를 리턴한다. + * @return int + */ + public int getLastDayMonth() { + return lastDayMonth; + } + + /** + * lastDayMonth attribute 값을 설정한다. + * @param lastDayMonth int + */ + public void setLastDayMonth(int lastDayMonth) { + this.lastDayMonth = lastDayMonth; + } + + +} diff --git a/src/main/java/egovframework/com/sym/cal/service/RestdeVO.java b/src/main/java/egovframework/com/sym/cal/service/RestdeVO.java new file mode 100644 index 0000000..5e732a4 --- /dev/null +++ b/src/main/java/egovframework/com/sym/cal/service/RestdeVO.java @@ -0,0 +1,199 @@ +package egovframework.com.sym.cal.service; + +import java.io.Serializable; + +/** + * + * 휴일 VO 클래스 + * @author 공통서비스 개발팀 이중호 + * @since 2009.04.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.04.01  이중호          최초 생성
    + *
    + * 
    + */ +public class RestdeVO extends Restde implements Serializable { + + private static final long serialVersionUID = 2548377950888283294L; + + /** 검색조건 */ + 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; + + /** + * searchCondition attribute 를 리턴한다. + * @return String + */ + public String getSearchCondition() { + return searchCondition; + } + + /** + * searchCondition attribute 값을 설정한다. + * @param searchCondition String + */ + public void setSearchCondition(String searchCondition) { + this.searchCondition = searchCondition; + } + + /** + * searchKeyword attribute 를 리턴한다. + * @return String + */ + public String getSearchKeyword() { + return searchKeyword; + } + + /** + * searchKeyword attribute 값을 설정한다. + * @param searchKeyword String + */ + public void setSearchKeyword(String searchKeyword) { + this.searchKeyword = searchKeyword; + } + + /** + * searchUseYn attribute 를 리턴한다. + * @return String + */ + public String getSearchUseYn() { + return searchUseYn; + } + + /** + * searchUseYn attribute 값을 설정한다. + * @param searchUseYn String + */ + public void setSearchUseYn(String searchUseYn) { + this.searchUseYn = searchUseYn; + } + + /** + * pageIndex attribute 를 리턴한다. + * @return int + */ + public int getPageIndex() { + return pageIndex; + } + + /** + * pageIndex attribute 값을 설정한다. + * @param pageIndex int + */ + public void setPageIndex(int pageIndex) { + this.pageIndex = pageIndex; + } + + /** + * pageUnit attribute 를 리턴한다. + * @return int + */ + public int getPageUnit() { + return pageUnit; + } + + /** + * pageUnit attribute 값을 설정한다. + * @param pageUnit int + */ + public void setPageUnit(int pageUnit) { + this.pageUnit = pageUnit; + } + + /** + * pageSize attribute 를 리턴한다. + * @return int + */ + public int getPageSize() { + return pageSize; + } + + /** + * pageSize attribute 값을 설정한다. + * @param pageSize int + */ + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + /** + * firstIndex attribute 를 리턴한다. + * @return int + */ + public int getFirstIndex() { + return firstIndex; + } + + /** + * firstIndex attribute 값을 설정한다. + * @param firstIndex int + */ + public void setFirstIndex(int firstIndex) { + this.firstIndex = firstIndex; + } + + /** + * lastIndex attribute 를 리턴한다. + * @return int + */ + public int getLastIndex() { + return lastIndex; + } + + /** + * lastIndex attribute 값을 설정한다. + * @param lastIndex int + */ + public void setLastIndex(int lastIndex) { + this.lastIndex = lastIndex; + } + + /** + * recordCountPerPage attribute 를 리턴한다. + * @return int + */ + public int getRecordCountPerPage() { + return recordCountPerPage; + } + + /** + * recordCountPerPage attribute 값을 설정한다. + * @param recordCountPerPage int + */ + public void setRecordCountPerPage(int recordCountPerPage) { + this.recordCountPerPage = recordCountPerPage; + } + + + +} diff --git a/src/main/java/egovframework/com/sym/cal/service/impl/EgovCalRestdeManageServiceImpl.java b/src/main/java/egovframework/com/sym/cal/service/impl/EgovCalRestdeManageServiceImpl.java new file mode 100644 index 0000000..23a96ee --- /dev/null +++ b/src/main/java/egovframework/com/sym/cal/service/impl/EgovCalRestdeManageServiceImpl.java @@ -0,0 +1,153 @@ +package egovframework.com.sym.cal.service.impl; + +import java.util.List; + +import egovframework.com.sym.cal.service.EgovCalRestdeManageService; +import egovframework.com.sym.cal.service.Restde; +import egovframework.com.sym.cal.service.RestdeVO; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + + + +/** + * + * 휴일에 대한 서비스 구현클래스를 정의한다 + * @author 공통서비스 개발팀 이중호 + * @since 2009.04.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.04.01  이중호          최초 생성
    + *
    + * 
    + */ +@Service("RestdeManageService") +public class EgovCalRestdeManageServiceImpl extends EgovAbstractServiceImpl implements EgovCalRestdeManageService { + + @Resource(name="RestdeManageDAO") + private RestdeManageDAO restdeManageDAO; + + /** + * 일반달력 팝업 정보를 조회한다. + */ + @Override + public List selectNormalRestdePopup(Restde restde) throws Exception { + return restdeManageDAO.selectNormalRestdePopup(restde); + } + + /** + * 행정달력 팝업 정보를 조회한다. + */ + @Override + public List selectAdministRestdePopup(Restde restde) throws Exception { + return restdeManageDAO.selectAdministRestdePopup(restde); + } + + /** + * 일반달력 일간 정보를 조회한다. + */ + @Override + public List selectNormalDayCal(Restde restde) throws Exception { + return restdeManageDAO.selectNormalDayCal(restde); + } + + /** + * 일반달력 일간 휴일을 조회한다. + */ + @Override + public List selectNormalDayRestde(Restde restde) throws Exception { + return restdeManageDAO.selectNormalDayRestde(restde); + } + + /** + * 일반달력 월간 휴일을 조회한다. + */ + @Override + public List selectNormalMonthRestde(Restde restde) throws Exception { + return restdeManageDAO.selectNormalMonthRestde(restde); + } + + /** + * 행정달력 일간 정보를 조회한다. + */ + @Override + public List selectAdministDayCal(Restde restde) throws Exception { + return restdeManageDAO.selectAdministDayCal(restde); + } + + /** + * 행정달력 일간 휴일을 조회한다. + */ + @Override + public List selectAdministDayRestde(Restde restde) throws Exception { + return restdeManageDAO.selectAdministDayRestde(restde); + } + + /** + * 행정달력 월간 휴일을 조회한다. + */ + @Override + public List selectAdministMonthRestde(Restde restde) throws Exception { + return restdeManageDAO.selectAdministMonthRestde(restde); + } + + /** + * 휴일을 삭제한다. + */ + @Override + public void deleteRestde(Restde restde) throws Exception { + restdeManageDAO.deleteRestde(restde); + } + + /** + * 휴일을 등록한다. + */ + @Override + public void insertRestde(Restde restde) throws Exception { + restdeManageDAO.insertRestde(restde); + } + + /** + * 휴일 상세항목을 조회한다. + */ + @Override + public Restde selectRestdeDetail(Restde restde) throws Exception { + Restde ret = restdeManageDAO.selectRestdeDetail(restde); + return ret; + } + + /** + * 휴일 목록을 조회한다. + */ + @Override + public List selectRestdeList(RestdeVO searchVO) throws Exception { + return restdeManageDAO.selectRestdeList(searchVO); + } + + /** + * 휴일 총 갯수를 조회한다. + */ + @Override + public int selectRestdeListTotCnt(RestdeVO searchVO) throws Exception { + return restdeManageDAO.selectRestdeListTotCnt(searchVO); + } + + /** + * 휴일을 수정한다. + */ + @Override + public void updateRestde(Restde restde) throws Exception { + restdeManageDAO.updateRestde(restde); + } + +} diff --git a/src/main/java/egovframework/com/sym/cal/service/impl/RestdeManageDAO.java b/src/main/java/egovframework/com/sym/cal/service/impl/RestdeManageDAO.java new file mode 100644 index 0000000..35bae68 --- /dev/null +++ b/src/main/java/egovframework/com/sym/cal/service/impl/RestdeManageDAO.java @@ -0,0 +1,170 @@ +package egovframework.com.sym.cal.service.impl; + +import java.util.List; + +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; +import egovframework.com.sym.cal.service.Restde; +import egovframework.com.sym.cal.service.RestdeVO; + +import org.springframework.stereotype.Repository; + +/** + * + * 휴일에 대한 데이터 접근 클래스를 정의한다 + * @author 공통서비스 개발팀 이중호 + * @since 2009.04.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.04.01  이중호          최초 생성
    + *
    + * 
    + */ +@Repository("RestdeManageDAO") +public class RestdeManageDAO extends EgovComAbstractDAO { + + /** + * 일반달력 팝업 정보를 조회한다. + * @param restde + * @return List(일반달력 팝업 날짜정보) + * @throws Exception + */ + public List selectNormalRestdePopup(Restde restde) throws Exception { + return list("RestdeManageDAO.selectNormalRestdePopup", restde); + } + + /** + * 행정달력 팝업 정보를 조회한다. + * @param restde + * @return List(행정달력 팝업 날짜정보) + * @throws Exception + */ + public List selectAdministRestdePopup(Restde restde) throws Exception { + return list("RestdeManageDAO.selectAdministRestdePopup", restde); + } + + /** + * 일반달력 일간 정보를 조회한다. + * @param restde + * @return List(일반달력 일간 날짜정보) + * @throws Exception + */ + public List selectNormalDayCal(Restde restde) throws Exception { + return list("RestdeManageDAO.selectNormalDayCal", restde); + } + + /** + * 일반달력 일간 휴일을 조회한다. + * @param restde + * @return List(일반달력 일간 휴일정보) + * @throws Exception + */ + public List selectNormalDayRestde(Restde restde) throws Exception { + return list("RestdeManageDAO.selectNormalDayRestde", restde); + } + + /** + * 일반달력 월간 휴일을 조회한다. + * @param restde + * @return List(일반달력 월간 휴일정보) + * @throws Exception + */ + public List selectNormalMonthRestde(Restde restde) throws Exception { + return list("RestdeManageDAO.selectNormalMonthRestde", restde); + } + + /** + * 행정달력 일간 정보를 조회한다. + * @param restde + * @return List(행정달력 일간 날짜정보) + * @throws Exception + */ + public List selectAdministDayCal(Restde restde) throws Exception { + return list("RestdeManageDAO.selectAdministDayCal", restde); + } + + /** + * 행정달력 일간 휴일을 조회한다. + * @param restde + * @return List(행정달력 일간 휴일정보) + * @throws Exception + */ + public List selectAdministDayRestde(Restde restde) throws Exception { + return list("RestdeManageDAO.selectAdministDayRestde", restde); + } + + /** + * 행정달력 월간 휴일을 조회한다. + * @param restde + * @return List(행정달력 월간 휴일정보) + * @throws Exception + */ + public List selectAdministMonthRestde(Restde restde) throws Exception { + return list("RestdeManageDAO.selectAdministMonthRestde", restde); + } + + /** + * 휴일을 삭제한다. + * @param restde + * @throws Exception + */ + public void deleteRestde(Restde restde) throws Exception { + delete("RestdeManageDAO.deleteRestde", restde); + } + + + /** + * 휴일을 등록한다. + * @param restde + * @throws Exception + */ + public void insertRestde(Restde restde) throws Exception { + insert("RestdeManageDAO.insertRestde", restde); + } + + /** + * 휴일 상세항목을 조회한다. + * @param restde + * @return Restde(휴일) + * @throws Exception + */ + public Restde selectRestdeDetail(Restde restde) throws Exception { + return (Restde) select("RestdeManageDAO.selectRestdeDetail", restde); + } + + + /** + * 휴일 목록을 조회한다. + * @param searchVO + * @return List(휴일 목록) + * @throws Exception + */ + public List selectRestdeList(RestdeVO searchVO) throws Exception { + return list("RestdeManageDAO.selectRestdeList", searchVO); + } + + /** + * 글 총 갯수를 조회한다. + * @param searchVO + * @return int(휴일 총 갯수) + * @throws Exception + */ + public int selectRestdeListTotCnt(RestdeVO searchVO) throws Exception { + return (Integer)select("RestdeManageDAO.selectRestdeListTotCnt", searchVO); + } + + /** + * 휴일을 수정한다. + * @param restde + * @throws Exception + */ + public void updateRestde(Restde restde) throws Exception { + update("RestdeManageDAO.updateRestde", restde); + } + +} diff --git a/src/main/java/egovframework/com/sym/cal/web/EgovCalRestdeManageController.java b/src/main/java/egovframework/com/sym/cal/web/EgovCalRestdeManageController.java new file mode 100644 index 0000000..0d74101 --- /dev/null +++ b/src/main/java/egovframework/com/sym/cal/web/EgovCalRestdeManageController.java @@ -0,0 +1,1531 @@ +package egovframework.com.sym.cal.web; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.annotation.IncludedInfo; +import egovframework.com.cmm.service.EgovCmmUseService; +import egovframework.com.sym.cal.service.EgovCalRestdeManageService; +import egovframework.com.sym.cal.service.Restde; +import egovframework.com.sym.cal.service.RestdeVO; + +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +import javax.annotation.Resource; + +import org.apache.commons.collections4.map.ListOrderedMap; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springmodules.validation.commons.DefaultBeanValidator; + + +/** + * + * 공휴일에 관한 요청을 받아 서비스 클래스로 요청을 전달하고 서비스클래스에서 처리한 결과를 웹 화면으로 전달을 위한 Controller를 정의한다 + * @author 공통서비스 개발팀 이중호 + * @since 2009.04.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.04.01  이중호          최초 생성
    + *   2011.8.26	  정진오	   IncludedInfo annotation 추가
    + *   2011.10.18  서준식          보안점검 조치 사항으로 sql injection에 대비한 파라미터 체크(달력 출력을 위한 숫자만 가능하도록)
    + * 
    + */ + +@Controller +public class EgovCalRestdeManageController { + + @Resource(name = "RestdeManageService") + private EgovCalRestdeManageService restdeManageService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + @Resource(name="egovRestDeIdGnrService") + private EgovIdGnrService idgenService; + + @Resource(name="EgovCmmUseService") + private EgovCmmUseService cmmUseService; + + @Autowired + private DefaultBeanValidator beanValidator; + + public BindingResult checkRestdeWithValidator(Restde restde, BindingResult bindingResult){ + + restde.setRestdeDe("dummy"); + restde.setRestdeNm("dummy"); + restde.setRestdeDc("dummy"); + restde.setRestdeSeCode("dummy"); + + beanValidator.validate(restde, bindingResult); + + return bindingResult; + } + + /** + * 달력 메인창을 호출한다. + * @param model + * @return "egovframework/com/sym/cal/EgovNormalCalPopup" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/callCalPopup.do") + public String callCalendar (ModelMap model + ) throws Exception { + return "egovframework/com/sym/cal/EgovCalPopup"; + } + + /** + * 달력을 호출한다. + * @param model + * @return "egovframework/com/sym/cal/EgovNormalCalPopup" + * @throws Exception + */ + @SuppressWarnings("unused") + @RequestMapping(value="/sym/cal/callCal.do") + public String callCal (Restde restde, BindingResult bindingResult + , ModelMap model + ) throws Exception { + + //2011.10.18 달력 출력을 위해 필요한 숫자 이외의 값을 사용하는 경우 체크 + bindingResult = checkRestdeWithValidator(restde, bindingResult); + + if(bindingResult.hasErrors()){ + + return "egovframework/com/cmm/error/dataAccessFailure"; + + } + + + Calendar cal = Calendar.getInstance(); + + if(restde.getYear()==null || restde.getYear().equals("")){ + restde.setYear(Integer.toString(cal.get(Calendar.YEAR))); + } + if(restde.getMonth()==null || restde.getMonth().equals("")){ + restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1)); + } + int iYear = Integer.parseInt(restde.getYear()); + int iMonth = Integer.parseInt(restde.getMonth()); + + if (iMonth<1){ + iYear--; + iMonth = 12; + } + if (iMonth>12){ + iYear++; + iMonth = 1; + } + if (iYear<1){ + iYear = 1; + iMonth = 1; + } + if (iYear>9999){ + iYear = 9999; + iMonth = 12; + } + + cal.set(iYear,iMonth-1,1); + + int firstWeek = cal.get(Calendar.DAY_OF_WEEK); + int lastDay = cal.getActualMaximum(Calendar.DATE); + int week = cal.get(Calendar.DAY_OF_WEEK); + + String year = Integer.toString(iYear); + String month = Integer.toString(iMonth); + String day = Integer.toString(cal.get(Calendar.DAY_OF_MONTH)); + + restde.setStartWeekMonth(firstWeek); + restde.setLastDayMonth(lastDay); + restde.setYear(year); + restde.setMonth(month); + + List CalInfoList = new ArrayList(); + String tmpDay = ""; + + /** + * 계산... START + */ + for(int i=0; i<42;i++) { + ListOrderedMap map = new ListOrderedMap(); + int cc = i + 1; + int dd = cc-firstWeek+1; + + if (dd > 0 && dd <= lastDay) { + tmpDay = Integer.toString(dd); + } else { + tmpDay = ""; + } + + map.put("year", year); + map.put("month", month); + map.put("day", tmpDay); + map.put("cellNum", cc); + map.put("weeks", (cc - 1) / 7 + 1); + map.put("week", (week-1) % 7 + 1); + map.put("restAt", ((week-1) % 7 + 1==1) ? "Y" : "N"); + + if (dd > 0 && dd <= lastDay) { + week ++; + } + CalInfoList.add(map); + + } + /** + * 계산... END + */ + + model.addAttribute("resultList", CalInfoList); + + return "egovframework/com/sym/cal/EgovCalendar"; + } + + /** + * 일반달력 팝업 메인창을 호출한다. + * @param model + * @return "egovframework/com/sym/cal/EgovNormalCalPopup" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/EgovNormalCalPopup.do") + public String callNormalCalPopup (ModelMap model + ) throws Exception { + return "egovframework/com/sym/cal/EgovNormalCalPopup"; + } + + /** + * 일반달력 팝업 정보를 조회한다. + * @param restde + * @param model + * @return "egovframework/com/sym/cal/EgovNormalCalendar" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/EgovselectNormalCalendar.do") + public String selectNormalRestdePopup (Restde restde, BindingResult bindingResult + , ModelMap model + ) throws Exception { + + //2011.10.18 달력 출력을 위해 필요한 숫자 이외의 값을 사용하는 경우 체크 + bindingResult = checkRestdeWithValidator(restde, bindingResult); + + if(bindingResult.hasErrors()){ + + return "egovframework/com/cmm/error/dataAccessFailure"; + + } + + Calendar cal = Calendar.getInstance(); + + if(restde.getYear()==null || restde.getYear().equals("")){ + restde.setYear(Integer.toString(cal.get(Calendar.YEAR))); + } + if(restde.getMonth()==null || restde.getMonth().equals("")){ + restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1)); + } + int iYear = Integer.parseInt(restde.getYear()); + int iMonth = Integer.parseInt(restde.getMonth()); + + if (iMonth<1){ + iYear--; + iMonth = 12; + } + if (iMonth>12){ + iYear++; + iMonth = 1; + } + if (iYear<1){ + iYear = 1; + iMonth = 1; + } + if (iYear>9999){ + iYear = 9999; + iMonth = 12; + } + restde.setYear(Integer.toString(iYear)); + restde.setMonth(Integer.toString(iMonth)); + + cal.set(iYear,iMonth-1,1); + + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + + List CalInfoList = restdeManageService.selectNormalRestdePopup(restde); + + model.addAttribute("resultList", CalInfoList); + + return "egovframework/com/sym/cal/EgovNormalCalendar"; + } + + + /** + * 행정달력 팝업 메인창을 호출한다. + * @param model + * @return "egovframework/com/sym/cal/EgovAdministCalPopup" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/EgovAdministCalPopup.do") + public String callAdministCalPopup (ModelMap model + ) throws Exception { + return "egovframework/com/sym/cal/EgovAdministCalPopup"; + } + + /** + * 행정달력 팝업 정보를 조회한다. + * @param restde + * @param model + * @return "egovframework/com/sym/cal/EgovAdministCalendar" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/EgovselectAdministCalendar.do") + public String selectAdministRestdePopup (Restde restde, BindingResult bindingResult + , ModelMap model + ) throws Exception { + + //2011.10.18 달력 출력을 위해 필요한 숫자 이외의 값을 사용하는 경우 체크 + bindingResult = checkRestdeWithValidator(restde, bindingResult); + + if(bindingResult.hasErrors()){ + + return "egovframework/com/cmm/error/dataAccessFailure"; + + } + + Calendar cal = Calendar.getInstance(); + + if(restde.getYear()==null || restde.getYear().equals("")){ + restde.setYear(Integer.toString(cal.get(Calendar.YEAR))); + } + if(restde.getMonth()==null || restde.getMonth().equals("")){ + restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1)); + } + int iYear = Integer.parseInt(restde.getYear()); + int iMonth = Integer.parseInt(restde.getMonth()); + + if (iMonth<1){ + iYear--; + iMonth = 12; + } + if (iMonth>12){ + iYear++; + iMonth = 1; + } + if (iYear<1){ + iYear = 1; + iMonth = 1; + } + if (iYear>9999){ + iYear = 9999; + iMonth = 12; + } + restde.setYear(Integer.toString(iYear)); + restde.setMonth(Integer.toString(iMonth)); + + cal.set(iYear,iMonth-1,1); + + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + + List CalInfoList = restdeManageService.selectAdministRestdePopup(restde); + + model.addAttribute("resultList", CalInfoList); + + return "egovframework/com/sym/cal/EgovAdministCalendar"; + } + + /** + * 일반달력 일간 + * @param restde + * @param model + * @return "egovframework/com/sym/cal/EgovNormalDayCalendar" + * @throws Exception + */ + @SuppressWarnings("static-access") + @RequestMapping(value="/sym/cal/EgovNormalDayCalendar.do") + public String selectNormalDayCalendar (Restde restde, BindingResult bindingResult + , ModelMap model + ) throws Exception { + + //2011.10.18 달력 출력을 위해 필요한 숫자 이외의 값을 사용하는 경우 체크 + bindingResult = checkRestdeWithValidator(restde, bindingResult); + + if(bindingResult.hasErrors()){ + + return "egovframework/com/cmm/error/dataAccessFailure"; + + } + + Calendar cal = Calendar.getInstance(); + + + if(restde.getYear()==null || restde.getYear().equals("")){ + restde.setYear(Integer.toString(cal.get(Calendar.YEAR))); + } + if(restde.getMonth()==null || restde.getMonth().equals("")){ + restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1)); + } + if(restde.getDay()==null || restde.getDay().equals("")){ + restde.setDay(Integer.toString(cal.get(Calendar.DATE))); + } + + int iYear = Integer.parseInt(restde.getYear()); + int iMonth = Integer.parseInt(restde.getMonth()); + int iDay = Integer.parseInt(restde.getDay()); + + if (iMonth<1){ + iYear--; + iMonth = 12; + } + if (iMonth>12){ + iYear++; + iMonth = 1; + } + if (iYear<1){ + iYear = 1; + iMonth = 1; + } + if (iYear>9999){ + iYear = 9999; + iMonth = 12; + } + restde.setYear(Integer.toString(iYear)); + restde.setMonth(Integer.toString(iMonth)); + + cal.set(iYear,iMonth-1,iDay); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + + cal.set(iYear,iMonth-1,Integer.parseInt(restde.getDay())); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + + restde.setYear(Integer.toString(cal.get(cal.YEAR))); + restde.setMonth(Integer.toString(cal.get(cal.MONTH)+1)); + restde.setDay(Integer.toString(cal.get(cal.DAY_OF_MONTH))); + restde.setWeek(cal.get(cal.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + + List CalInfoList = restdeManageService.selectNormalDayCal(restde); + List NormalWeekRestdeList = restdeManageService.selectNormalDayRestde(restde); + + model.addAttribute("resultList", CalInfoList); + model.addAttribute("RestdeList", NormalWeekRestdeList); + + return "egovframework/com/sym/cal/EgovNormalDayCalendar"; + } + + /** + * 일반달력 주간 + * @param restde + * @param model + * @return "egovframework/com/sym/cal/EgovNormalWeekCalendar" + * @throws Exception + */ + @SuppressWarnings("static-access") + @RequestMapping(value="/sym/cal/EgovNormalWeekCalendar.do") + public String selectNormalWeekCalendar (Restde restde, BindingResult bindingResult + , ModelMap model + ) throws Exception { + + //2011.10.18 달력 출력을 위해 필요한 숫자 이외의 값을 사용하는 경우 체크 + bindingResult = checkRestdeWithValidator(restde, bindingResult); + + if(bindingResult.hasErrors()){ + + return "egovframework/com/cmm/error/dataAccessFailure"; + + } + + Calendar cal = Calendar.getInstance(); + + if(restde.getYear()==null || restde.getYear().equals("")){ + restde.setYear(Integer.toString(cal.get(Calendar.YEAR))); + } + if(restde.getMonth()==null || restde.getMonth().equals("")){ + restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1)); + } + if(restde.getDay()==null || restde.getDay().equals("")){ + restde.setDay(Integer.toString(cal.get(Calendar.DATE))); + } + + int iYear = Integer.parseInt(restde.getYear()); + int iMonth = Integer.parseInt(restde.getMonth()); + + if (iMonth<1){ + iYear--; + iMonth = 12; + } + if (iMonth>12){ + iYear++; + iMonth = 1; + } + if (iYear<1){ + iYear = 1; + iMonth = 1; + } + if (iYear>9999){ + iYear = 9999; + iMonth = 12; + } + restde.setYear(Integer.toString(iYear)); + restde.setMonth(Integer.toString(iMonth)); + + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + + cal.set(iYear,iMonth-1,Integer.parseInt(restde.getDay())); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + + int iStartWeek = restde.getStartWeekMonth(); + int iLastDate = restde.getLastDayMonth(); + int iDayWeek = cal.get(Calendar.DAY_OF_WEEK); + + int iMaxWeeks = (int)Math.floor(iLastDate/7); + iMaxWeeks = iMaxWeeks + (int)Math.ceil(((iLastDate - iMaxWeeks * 7) + iStartWeek - 1) / 7.0); + restde.setMaxWeeks(iMaxWeeks); + + if (iMaxWeeks < restde.getWeeks()) { + restde.setWeeks(iMaxWeeks); + } + + Restde vo = new Restde(); + Calendar weekCal = Calendar.getInstance(); + weekCal.setTime(cal.getTime()); + + if(restde.getWeeks()!=0){ + weekCal.set(weekCal.DATE, (restde.getWeeks() - 1) * 7 + 1); + if(restde.getWeeks()>1){ + iDayWeek = weekCal.get(weekCal.DAY_OF_WEEK); + weekCal.add(weekCal.DATE, (-1)*(iDayWeek-1)); + } + restde.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH)+1)); + } + + iDayWeek = weekCal.get(weekCal.DAY_OF_WEEK); + + // 일요일 + weekCal.add(weekCal.DATE, (-1)*(iDayWeek-1)); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_1 = restdeManageService.selectNormalDayCal(vo); + List NormalWeekRestdeList_1 = restdeManageService.selectNormalDayRestde(vo); + + // 월요일 + weekCal.add(weekCal.DATE, 1); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_2 = restdeManageService.selectNormalDayCal(vo); + List NormalWeekRestdeList_2 = restdeManageService.selectNormalDayRestde(vo); + + // 화요일 + weekCal.add(weekCal.DATE, 1); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_3 = restdeManageService.selectNormalDayCal(vo); + List NormalWeekRestdeList_3 = restdeManageService.selectNormalDayRestde(vo); + + // 수요일 + weekCal.add(weekCal.DATE, 1); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_4 = restdeManageService.selectNormalDayCal(vo); + List NormalWeekRestdeList_4 = restdeManageService.selectNormalDayRestde(vo); + + // 목요일 + weekCal.add(weekCal.DATE, 1); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_5 = restdeManageService.selectNormalDayCal(vo); + List NormalWeekRestdeList_5 = restdeManageService.selectNormalDayRestde(vo); + + // 금요일 + weekCal.add(weekCal.DATE, 1); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_6 = restdeManageService.selectNormalDayCal(vo); + List NormalWeekRestdeList_6 = restdeManageService.selectNormalDayRestde(vo); + + // 토요일 + weekCal.add(weekCal.DATE, 1); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_7 = restdeManageService.selectNormalDayCal(vo); + List NormalWeekRestdeList_7 = restdeManageService.selectNormalDayRestde(vo); + + model.addAttribute("resultList_1", CalInfoList_1); + model.addAttribute("resultList_2", CalInfoList_2); + model.addAttribute("resultList_3", CalInfoList_3); + model.addAttribute("resultList_4", CalInfoList_4); + model.addAttribute("resultList_5", CalInfoList_5); + model.addAttribute("resultList_6", CalInfoList_6); + model.addAttribute("resultList_7", CalInfoList_7); + model.addAttribute("RestdeList_1", NormalWeekRestdeList_1); + model.addAttribute("RestdeList_2", NormalWeekRestdeList_2); + model.addAttribute("RestdeList_3", NormalWeekRestdeList_3); + model.addAttribute("RestdeList_4", NormalWeekRestdeList_4); + model.addAttribute("RestdeList_5", NormalWeekRestdeList_5); + model.addAttribute("RestdeList_6", NormalWeekRestdeList_6); + model.addAttribute("RestdeList_7", NormalWeekRestdeList_7); + + List CalInfoList = restdeManageService.selectNormalDayCal(restde); + model.addAttribute("resultList", CalInfoList); + + return "egovframework/com/sym/cal/EgovNormalWeekCalendar"; + } + + /** + * 일반달력 월간 + * @param restde + * @param model + * @return "egovframework/com/sym/cal/EgovNormalMonthCalendar" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/EgovNormalMonthCalendar.do") + public String selectNormalMonthCalendar (Restde restde, BindingResult bindingResult + , ModelMap model + ) throws Exception { + + //2011.10.18 달력 출력을 위해 필요한 숫자 이외의 값을 사용하는 경우 체크 + bindingResult = checkRestdeWithValidator(restde, bindingResult); + + if(bindingResult.hasErrors()){ + + return "egovframework/com/cmm/error/dataAccessFailure"; + + } + + Calendar cal = Calendar.getInstance(); + + if(restde.getYear()==null || restde.getYear().equals("")){ + restde.setYear(Integer.toString(cal.get(Calendar.YEAR))); + } + if(restde.getMonth()==null || restde.getMonth().equals("")){ + restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1)); + } + int iYear = Integer.parseInt(restde.getYear()); + int iMonth = Integer.parseInt(restde.getMonth()); + + if (iMonth<1){ + iYear--; + iMonth = 12; + } + if (iMonth>12){ + iYear++; + iMonth = 1; + } + if (iYear<1){ + iYear = 1; + iMonth = 1; + } + if (iYear>9999){ + iYear = 9999; + iMonth = 12; + } + restde.setYear(Integer.toString(iYear)); + restde.setMonth(Integer.toString(iMonth)); + + cal.set(iYear,iMonth-1,1); + + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + + List CalInfoList = restdeManageService.selectNormalRestdePopup(restde); + + + List NormalMonthRestdeList = restdeManageService.selectNormalMonthRestde(restde); + + model.addAttribute("resultList", CalInfoList); + model.addAttribute("RestdeList", NormalMonthRestdeList); + + return "egovframework/com/sym/cal/EgovNormalMonthCalendar"; + } + + /** + * 일반달력 연간 + * @param restde + * @param model + * @return "egovframework/com/sym/cal/EgovNormalYearCalendar" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/EgovNormalYearCalendar.do") + public String selectNormalYearCalendar (Restde restde, BindingResult bindingResult + , ModelMap model + ) throws Exception { + + //2011.10.18 달력 출력을 위해 필요한 숫자 이외의 값을 사용하는 경우 체크 + bindingResult = checkRestdeWithValidator(restde, bindingResult); + + if(bindingResult.hasErrors()){ + + return "egovframework/com/cmm/error/dataAccessFailure"; + + } + + Calendar cal = Calendar.getInstance(); + + if(restde.getYear()==null || restde.getYear().equals("")){ + restde.setYear(Integer.toString(cal.get(Calendar.YEAR))); + } + if(restde.getMonth()==null || restde.getMonth().equals("")){ + restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1)); + } + int iYear = Integer.parseInt(restde.getYear()); + int iMonth = Integer.parseInt(restde.getMonth()); + + if (iMonth<1){ + iYear--; + iMonth = 12; + } + if (iMonth>12){ + iYear++; + iMonth = 1; + } + if (iYear<1){ + iYear = 1; + iMonth = 1; + } + if (iYear>9999){ + iYear = 9999; + iMonth = 12; + } + restde.setYear(Integer.toString(iYear)); + + /* 월별확인 */ + + /* 1월 */ + iMonth = 1; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_1 = restdeManageService.selectNormalRestdePopup(restde); + List NormalMonthRestdeList_1 = restdeManageService.selectNormalMonthRestde(restde); + + /* 2월 */ + iMonth = 2; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_2 = restdeManageService.selectNormalRestdePopup(restde); + List NormalMonthRestdeList_2 = restdeManageService.selectNormalMonthRestde(restde); + + /* 3월 */ + iMonth = 3; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_3 = restdeManageService.selectNormalRestdePopup(restde); + List NormalMonthRestdeList_3 = restdeManageService.selectNormalMonthRestde(restde); + + /* 4월 */ + iMonth = 4; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_4 = restdeManageService.selectNormalRestdePopup(restde); + List NormalMonthRestdeList_4 = restdeManageService.selectNormalMonthRestde(restde); + + /* 5월 */ + iMonth = 5; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_5 = restdeManageService.selectNormalRestdePopup(restde); + List NormalMonthRestdeList_5 = restdeManageService.selectNormalMonthRestde(restde); + + /* 6월 */ + iMonth = 6; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_6 = restdeManageService.selectNormalRestdePopup(restde); + List NormalMonthRestdeList_6 = restdeManageService.selectNormalMonthRestde(restde); + + /* 7월 */ + iMonth = 7; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_7 = restdeManageService.selectNormalRestdePopup(restde); + List NormalMonthRestdeList_7 = restdeManageService.selectNormalMonthRestde(restde); + + /* 8월 */ + iMonth = 8; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_8 = restdeManageService.selectNormalRestdePopup(restde); + List NormalMonthRestdeList_8 = restdeManageService.selectNormalMonthRestde(restde); + + /* 9월 */ + iMonth = 9; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_9 = restdeManageService.selectNormalRestdePopup(restde); + List NormalMonthRestdeList_9 = restdeManageService.selectNormalMonthRestde(restde); + + /* 10월 */ + iMonth = 10; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_10 = restdeManageService.selectNormalRestdePopup(restde); + List NormalMonthRestdeList_10 = restdeManageService.selectNormalMonthRestde(restde); + + /* 11월 */ + iMonth = 11; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_11 = restdeManageService.selectNormalRestdePopup(restde); + List NormalMonthRestdeList_11 = restdeManageService.selectNormalMonthRestde(restde); + + /* 12월 */ + iMonth = 12; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_12 = restdeManageService.selectNormalRestdePopup(restde); + List NormalMonthRestdeList_12 = restdeManageService.selectNormalMonthRestde(restde); + + model.addAttribute("resultList_1" , CalInfoList_1 ); + model.addAttribute("resultList_2" , CalInfoList_2 ); + model.addAttribute("resultList_3" , CalInfoList_3 ); + model.addAttribute("resultList_4" , CalInfoList_4 ); + model.addAttribute("resultList_5" , CalInfoList_5 ); + model.addAttribute("resultList_6" , CalInfoList_6 ); + model.addAttribute("resultList_7" , CalInfoList_7 ); + model.addAttribute("resultList_8" , CalInfoList_8 ); + model.addAttribute("resultList_9" , CalInfoList_9 ); + model.addAttribute("resultList_10", CalInfoList_10); + model.addAttribute("resultList_11", CalInfoList_11); + model.addAttribute("resultList_12", CalInfoList_12); + model.addAttribute("RestdeList_1" , NormalMonthRestdeList_1 ); + model.addAttribute("RestdeList_2" , NormalMonthRestdeList_2 ); + model.addAttribute("RestdeList_3" , NormalMonthRestdeList_3 ); + model.addAttribute("RestdeList_4" , NormalMonthRestdeList_4 ); + model.addAttribute("RestdeList_5" , NormalMonthRestdeList_5 ); + model.addAttribute("RestdeList_6" , NormalMonthRestdeList_6 ); + model.addAttribute("RestdeList_7" , NormalMonthRestdeList_7 ); + model.addAttribute("RestdeList_8" , NormalMonthRestdeList_8 ); + model.addAttribute("RestdeList_9" , NormalMonthRestdeList_9 ); + model.addAttribute("RestdeList_10", NormalMonthRestdeList_10); + model.addAttribute("RestdeList_11", NormalMonthRestdeList_11); + model.addAttribute("RestdeList_12", NormalMonthRestdeList_12); + + return "egovframework/com/sym/cal/EgovNormalYearCalendar"; + } + + + /** + * 행정달력 일간 + * @param restde + * @param model + * @return "egovframework/com/sym/cal/EgovAdministDayCalendar" + * @throws Exception + */ + @SuppressWarnings("static-access") + @RequestMapping(value="/sym/cal/EgovAdministDayCalendar.do") + public String selectAdministDayCalendar (Restde restde, BindingResult bindingResult + , ModelMap model + ) throws Exception { + + //2011.10.18 달력 출력을 위해 필요한 숫자 이외의 값을 사용하는 경우 체크 + bindingResult = checkRestdeWithValidator(restde, bindingResult); + + if(bindingResult.hasErrors()){ + + return "egovframework/com/cmm/error/dataAccessFailure"; + + } + + Calendar cal = Calendar.getInstance(); + + + if(restde.getYear()==null || restde.getYear().equals("")){ + restde.setYear(Integer.toString(cal.get(Calendar.YEAR))); + } + if(restde.getMonth()==null || restde.getMonth().equals("")){ + restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1)); + } + if(restde.getDay()==null || restde.getDay().equals("")){ + restde.setDay(Integer.toString(cal.get(Calendar.DATE))); + } + + int iYear = Integer.parseInt(restde.getYear()); + int iMonth = Integer.parseInt(restde.getMonth()); + int iDay = Integer.parseInt(restde.getDay()); + + if (iMonth<1){ + iYear--; + iMonth = 12; + } + if (iMonth>12){ + iYear++; + iMonth = 1; + } + if (iYear<1){ + iYear = 1; + iMonth = 1; + } + if (iYear>9999){ + iYear = 9999; + iMonth = 12; + } + restde.setYear(Integer.toString(iYear)); + restde.setMonth(Integer.toString(iMonth)); + + cal.set(iYear,iMonth-1,iDay); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + + cal.set(iYear,iMonth-1,Integer.parseInt(restde.getDay())); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + + restde.setYear(Integer.toString(cal.get(cal.YEAR))); + restde.setMonth(Integer.toString(cal.get(cal.MONTH)+1)); + restde.setDay(Integer.toString(cal.get(cal.DAY_OF_MONTH))); + restde.setWeek(cal.get(cal.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + + List CalInfoList = restdeManageService.selectAdministDayCal(restde); + List AdministWeekRestdeList = restdeManageService.selectAdministDayRestde(restde); + + model.addAttribute("resultList", CalInfoList); + model.addAttribute("RestdeList", AdministWeekRestdeList); + + return "egovframework/com/sym/cal/EgovAdministDayCalendar"; + } + + + /** + * 행정달력 주간 + * @param restde + * @param model + * @return "egovframework/com/sym/cal/EgovAdministWeekCalendar" + * @throws Exception + */ + @SuppressWarnings("static-access") + @RequestMapping(value="/sym/cal/EgovAdministWeekCalendar.do") + public String selectAdministWeekCalendar (Restde restde, BindingResult bindingResult + , ModelMap model + ) throws Exception { + + //2011.10.18 달력 출력을 위해 필요한 숫자 이외의 값을 사용하는 경우 체크 + bindingResult = checkRestdeWithValidator(restde, bindingResult); + + if(bindingResult.hasErrors()){ + + return "egovframework/com/cmm/error/dataAccessFailure"; + + } + + Calendar cal = Calendar.getInstance(); + + if(restde.getYear()==null || restde.getYear().equals("")){ + restde.setYear(Integer.toString(cal.get(Calendar.YEAR))); + } + if(restde.getMonth()==null || restde.getMonth().equals("")){ + restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1)); + } + if(restde.getDay()==null || restde.getDay().equals("")){ + restde.setDay(Integer.toString(cal.get(Calendar.DATE))); + } + + int iYear = Integer.parseInt(restde.getYear()); + int iMonth = Integer.parseInt(restde.getMonth()); + + if (iMonth<1){ + iYear--; + iMonth = 12; + } + if (iMonth>12){ + iYear++; + iMonth = 1; + } + if (iYear<1){ + iYear = 1; + iMonth = 1; + } + if (iYear>9999){ + iYear = 9999; + iMonth = 12; + } + restde.setYear(Integer.toString(iYear)); + restde.setMonth(Integer.toString(iMonth)); + + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + + cal.set(iYear,iMonth-1,Integer.parseInt(restde.getDay())); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + + int iStartWeek = restde.getStartWeekMonth(); + int iLastDate = restde.getLastDayMonth(); + int iDayWeek = cal.get(Calendar.DAY_OF_WEEK); + + int iMaxWeeks = (int)Math.floor(iLastDate/7); + iMaxWeeks = iMaxWeeks + (int)Math.ceil(((iLastDate - iMaxWeeks * 7) + iStartWeek - 1) / 7.0); + restde.setMaxWeeks(iMaxWeeks); + + if (iMaxWeeks < restde.getWeeks()) { + restde.setWeeks(iMaxWeeks); + } + + Restde vo = new Restde(); + Calendar weekCal = Calendar.getInstance(); + weekCal.setTime(cal.getTime()); + + if(restde.getWeeks()!=0){ + weekCal.set(weekCal.DATE, (restde.getWeeks() - 1) * 7 + 1); + if(restde.getWeeks()>1){ + iDayWeek = weekCal.get(weekCal.DAY_OF_WEEK); + weekCal.add(weekCal.DATE, (-1)*(iDayWeek-1)); + } + restde.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH)+1)); + } + List CalInfoList = restdeManageService.selectAdministDayCal(restde); + + iDayWeek = weekCal.get(weekCal.DAY_OF_WEEK); + + // 일요일 + weekCal.add(weekCal.DATE, (-1)*(iDayWeek-1)); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_1 = restdeManageService.selectAdministDayCal(vo); + List AdministWeekRestdeList_1 = restdeManageService.selectAdministDayRestde(vo); + + // 월요일 + weekCal.add(weekCal.DATE, 1); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_2 = restdeManageService.selectAdministDayCal(vo); + List AdministWeekRestdeList_2 = restdeManageService.selectAdministDayRestde(vo); + + // 화요일 + weekCal.add(weekCal.DATE, 1); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_3 = restdeManageService.selectAdministDayCal(vo); + List AdministWeekRestdeList_3 = restdeManageService.selectAdministDayRestde(vo); + + // 수요일 + weekCal.add(weekCal.DATE, 1); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_4 = restdeManageService.selectAdministDayCal(vo); + List AdministWeekRestdeList_4 = restdeManageService.selectAdministDayRestde(vo); + + // 목요일 + weekCal.add(weekCal.DATE, 1); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_5 = restdeManageService.selectAdministDayCal(vo); + List AdministWeekRestdeList_5 = restdeManageService.selectAdministDayRestde(vo); + + // 금요일 + weekCal.add(weekCal.DATE, 1); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_6 = restdeManageService.selectAdministDayCal(vo); + List AdministWeekRestdeList_6 = restdeManageService.selectAdministDayRestde(vo); + + // 토요일 + weekCal.add(weekCal.DATE, 1); + vo.setYear(Integer.toString(weekCal.get(weekCal.YEAR))); + vo.setMonth(Integer.toString(weekCal.get(weekCal.MONTH)+1)); + vo.setDay(Integer.toString(weekCal.get(weekCal.DAY_OF_MONTH))); + vo.setWeek(weekCal.get(weekCal.DAY_OF_WEEK)); + List CalInfoList_7 = restdeManageService.selectAdministDayCal(vo); + List AdministWeekRestdeList_7 = restdeManageService.selectAdministDayRestde(vo); + + model.addAttribute("resultList_1", CalInfoList_1); + model.addAttribute("resultList_2", CalInfoList_2); + model.addAttribute("resultList_3", CalInfoList_3); + model.addAttribute("resultList_4", CalInfoList_4); + model.addAttribute("resultList_5", CalInfoList_5); + model.addAttribute("resultList_6", CalInfoList_6); + model.addAttribute("resultList_7", CalInfoList_7); + model.addAttribute("RestdeList_1", AdministWeekRestdeList_1); + model.addAttribute("RestdeList_2", AdministWeekRestdeList_2); + model.addAttribute("RestdeList_3", AdministWeekRestdeList_3); + model.addAttribute("RestdeList_4", AdministWeekRestdeList_4); + model.addAttribute("RestdeList_5", AdministWeekRestdeList_5); + model.addAttribute("RestdeList_6", AdministWeekRestdeList_6); + model.addAttribute("RestdeList_7", AdministWeekRestdeList_7); + + model.addAttribute("resultList", CalInfoList); + + return "egovframework/com/sym/cal/EgovAdministWeekCalendar"; + } + + /** + * 행정달력 월간 + * @param restde + * @param model + * @return "egovframework/com/sym/cal/EgovAdministMonthCalendar" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/EgovAdministMonthCalendar.do") + public String selectAdministMonthCalendar (Restde restde, BindingResult bindingResult + , ModelMap model + ) throws Exception { + + //2011.10.18 달력 출력을 위해 필요한 숫자 이외의 값을 사용하는 경우 체크 + bindingResult = checkRestdeWithValidator(restde, bindingResult); + + if(bindingResult.hasErrors()){ + + return "egovframework/com/cmm/error/dataAccessFailure"; + + } + + Calendar cal = Calendar.getInstance(); + + if(restde.getYear()==null || restde.getYear().equals("")){ + restde.setYear(Integer.toString(cal.get(Calendar.YEAR))); + } + if(restde.getMonth()==null || restde.getMonth().equals("")){ + restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1)); + } + int iYear = Integer.parseInt(restde.getYear()); + int iMonth = Integer.parseInt(restde.getMonth()); + + if (iMonth<1){ + iYear--; + iMonth = 12; + } + if (iMonth>12){ + iYear++; + iMonth = 1; + } + if (iYear<1){ + iYear = 1; + iMonth = 1; + } + if (iYear>9999){ + iYear = 9999; + iMonth = 12; + } + restde.setYear(Integer.toString(iYear)); + restde.setMonth(Integer.toString(iMonth)); + + cal.set(iYear,iMonth-1,1); + + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + + List CalInfoList = restdeManageService.selectAdministRestdePopup(restde); + + + List AdministMonthRestdeList = restdeManageService.selectAdministMonthRestde(restde); + + model.addAttribute("resultList", CalInfoList); + model.addAttribute("RestdeList", AdministMonthRestdeList); + + return "egovframework/com/sym/cal/EgovAdministMonthCalendar"; + } + + + /** + * 행정달력 연간 + * @param restde + * @param model + * @return "egovframework/com/sym/cal/EgovAdministYearCalendar" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/EgovAdministYearCalendar.do") + public String selectAdministYearCalendar (Restde restde, BindingResult bindingResult + , ModelMap model + ) throws Exception { + + //2011.10.18 달력 출력을 위해 필요한 숫자 이외의 값을 사용하는 경우 체크 + bindingResult = checkRestdeWithValidator(restde, bindingResult); + + if(bindingResult.hasErrors()){ + + return "egovframework/com/cmm/error/dataAccessFailure"; + + } + + Calendar cal = Calendar.getInstance(); + + if(restde.getYear()==null || restde.getYear().equals("")){ + restde.setYear(Integer.toString(cal.get(Calendar.YEAR))); + } + if(restde.getMonth()==null || restde.getMonth().equals("")){ + restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1)); + } + int iYear = Integer.parseInt(restde.getYear()); + int iMonth = Integer.parseInt(restde.getMonth()); + + if (iMonth<1){ + iYear--; + iMonth = 12; + } + if (iMonth>12){ + iYear++; + iMonth = 1; + } + if (iYear<1){ + iYear = 1; + iMonth = 1; + } + if (iYear>9999){ + iYear = 9999; + iMonth = 12; + } + restde.setYear(Integer.toString(iYear)); + + /* 월별확인 */ + + /* 1월 */ + iMonth = 1; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_1 = restdeManageService.selectAdministRestdePopup(restde); + List AdministMonthRestdeList_1 = restdeManageService.selectAdministMonthRestde(restde); + + /* 2월 */ + iMonth = 2; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_2 = restdeManageService.selectAdministRestdePopup(restde); + List AdministMonthRestdeList_2 = restdeManageService.selectAdministMonthRestde(restde); + + /* 3월 */ + iMonth = 3; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_3 = restdeManageService.selectAdministRestdePopup(restde); + List AdministMonthRestdeList_3 = restdeManageService.selectAdministMonthRestde(restde); + + /* 4월 */ + iMonth = 4; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_4 = restdeManageService.selectAdministRestdePopup(restde); + List AdministMonthRestdeList_4 = restdeManageService.selectAdministMonthRestde(restde); + + /* 5월 */ + iMonth = 5; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_5 = restdeManageService.selectAdministRestdePopup(restde); + List AdministMonthRestdeList_5 = restdeManageService.selectAdministMonthRestde(restde); + + /* 6월 */ + iMonth = 6; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_6 = restdeManageService.selectAdministRestdePopup(restde); + List AdministMonthRestdeList_6 = restdeManageService.selectAdministMonthRestde(restde); + + /* 7월 */ + iMonth = 7; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_7 = restdeManageService.selectAdministRestdePopup(restde); + List AdministMonthRestdeList_7 = restdeManageService.selectAdministMonthRestde(restde); + + /* 8월 */ + iMonth = 8; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_8 = restdeManageService.selectAdministRestdePopup(restde); + List AdministMonthRestdeList_8 = restdeManageService.selectAdministMonthRestde(restde); + + /* 9월 */ + iMonth = 9; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_9 = restdeManageService.selectAdministRestdePopup(restde); + List AdministMonthRestdeList_9 = restdeManageService.selectAdministMonthRestde(restde); + + /* 10월 */ + iMonth = 10; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_10 = restdeManageService.selectAdministRestdePopup(restde); + List AdministMonthRestdeList_10 = restdeManageService.selectAdministMonthRestde(restde); + + /* 11월 */ + iMonth = 11; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_11 = restdeManageService.selectAdministRestdePopup(restde); + List AdministMonthRestdeList_11 = restdeManageService.selectAdministMonthRestde(restde); + + /* 12월 */ + iMonth = 12; + restde.setMonth(Integer.toString(iMonth)); + cal.set(iYear,iMonth-1,1); + restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK)); + restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE)); + List CalInfoList_12 = restdeManageService.selectAdministRestdePopup(restde); + List AdministMonthRestdeList_12 = restdeManageService.selectAdministMonthRestde(restde); + + model.addAttribute("resultList_1" , CalInfoList_1 ); + model.addAttribute("resultList_2" , CalInfoList_2 ); + model.addAttribute("resultList_3" , CalInfoList_3 ); + model.addAttribute("resultList_4" , CalInfoList_4 ); + model.addAttribute("resultList_5" , CalInfoList_5 ); + model.addAttribute("resultList_6" , CalInfoList_6 ); + model.addAttribute("resultList_7" , CalInfoList_7 ); + model.addAttribute("resultList_8" , CalInfoList_8 ); + model.addAttribute("resultList_9" , CalInfoList_9 ); + model.addAttribute("resultList_10", CalInfoList_10); + model.addAttribute("resultList_11", CalInfoList_11); + model.addAttribute("resultList_12", CalInfoList_12); + model.addAttribute("RestdeList_1" , AdministMonthRestdeList_1 ); + model.addAttribute("RestdeList_2" , AdministMonthRestdeList_2 ); + model.addAttribute("RestdeList_3" , AdministMonthRestdeList_3 ); + model.addAttribute("RestdeList_4" , AdministMonthRestdeList_4 ); + model.addAttribute("RestdeList_5" , AdministMonthRestdeList_5 ); + model.addAttribute("RestdeList_6" , AdministMonthRestdeList_6 ); + model.addAttribute("RestdeList_7" , AdministMonthRestdeList_7 ); + model.addAttribute("RestdeList_8" , AdministMonthRestdeList_8 ); + model.addAttribute("RestdeList_9" , AdministMonthRestdeList_9 ); + model.addAttribute("RestdeList_10", AdministMonthRestdeList_10); + model.addAttribute("RestdeList_11", AdministMonthRestdeList_11); + model.addAttribute("RestdeList_12", AdministMonthRestdeList_12); + + return "egovframework/com/sym/cal/EgovAdministYearCalendar"; + } + + + /** + * 휴일을 삭제한다. + * @param loginVO + * @param restde + * @param model + * @return "forward:/sym/cal/EgovRestdeList.do" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/EgovRestdeRemove.do") + public String deleteRestde (@ModelAttribute("loginVO") LoginVO loginVO + , Restde restde + , ModelMap model + ) throws Exception { + restdeManageService.deleteRestde(restde); + return "forward:/sym/cal/EgovRestdeList.do"; + } + + + /** + * 휴일을 등록한다. + * @param loginVO + * @param restde + * @param bindingResult + * @param model + * @return "egovframework/com/sym/cal/EgovRestdeRegist" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/EgovRestdeRegist.do") + public String insertRestde (@ModelAttribute("loginVO") LoginVO loginVO + , @ModelAttribute("restde") Restde restde + , BindingResult bindingResult + , ModelMap model + ) throws Exception { + if (restde.getRestdeDe() == null + ||restde.getRestdeDe().equals("")) { + + ComDefaultCodeVO vo = new ComDefaultCodeVO(); + vo.setCodeId("COM017"); + List restdeCodeList = cmmUseService.selectCmmCodeDetail(vo); + model.addAttribute("restdeCode", restdeCodeList); + + return "egovframework/com/sym/cal/EgovRestdeRegist"; + } + + beanValidator.validate(restde, bindingResult); + if (bindingResult.hasErrors()){ + return "egovframework/com/sym/cal/EgovRestdeRegist"; + } + + restde.setRestdeNo(idgenService.getNextIntegerId()%1000000); + restde.setFrstRegisterId(loginVO.getUniqId()); + + restdeManageService.insertRestde(restde); + return "forward:/sym/cal/EgovRestdeList.do"; + } + + + /** + * 휴일 세부내역을 조회한다. + * @param loginVO + * @param restde + * @param model + * @return "egovframework/com/sym/cal/EgovRestdeDetail" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/EgovRestdeDetail.do") + public String selectRestdeDetail (@ModelAttribute("loginVO") LoginVO loginVO + , Restde restde + , ModelMap model + ) throws Exception { + Restde vo = restdeManageService.selectRestdeDetail(restde); + model.addAttribute("result", vo); + + return "egovframework/com/sym/cal/EgovRestdeDetail"; + } + + /** + * 휴일 리스트를 조회한다. + * @param loginVO + * @param searchVO + * @param model + * @return "egovframework/com/sym/cal/EgovRestdeList" + * @throws Exception + */ + @IncludedInfo(name="공휴일관리(달력)", listUrl="/sym/cal/EgovRestdeList.do", order = 1300 ,gid = 90) + @RequestMapping(value="/sym/cal/EgovRestdeList.do") + public String selectRestdeList (@ModelAttribute("loginVO") LoginVO loginVO + , @ModelAttribute("searchVO") RestdeVO searchVO + , ModelMap model + ) throws Exception { + /** EgovPropertyService.sample */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("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()); + + List CmmnCodeList = restdeManageService.selectRestdeList(searchVO); + model.addAttribute("resultList", CmmnCodeList); + + int totCnt = restdeManageService.selectRestdeListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "egovframework/com/sym/cal/EgovRestdeList"; + } + + /** + * 휴일을 수정한다. + * @param loginVO + * @param restde + * @param bindingResult + * @param commandMap + * @param model + * @return "egovframework/com/sym/cal/EgovRestdeModify" + * @throws Exception + */ + @RequestMapping(value="/sym/cal/EgovRestdeModify.do") + public String updateRestde (@ModelAttribute("loginVO") LoginVO loginVO + , @ModelAttribute("restde") Restde restde + , BindingResult bindingResult + , @RequestParam Map commandMap + , ModelMap model + ) throws Exception { + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + if (sCmd.equals("")) { + Restde vo = restdeManageService.selectRestdeDetail(restde); + model.addAttribute("restde", vo); + + ComDefaultCodeVO CodeVO = new ComDefaultCodeVO(); + CodeVO.setCodeId("COM017"); + List restdeCodeList = cmmUseService.selectCmmCodeDetail(CodeVO); + model.addAttribute("restdeCode", restdeCodeList); + + return "egovframework/com/sym/cal/EgovRestdeModify"; + } else if (sCmd.equals("Modify")) { + beanValidator.validate(restde, bindingResult); + if (bindingResult.hasErrors()){ + ComDefaultCodeVO CodeVO = new ComDefaultCodeVO(); + CodeVO.setCodeId("COM017"); + List restdeCodeList = cmmUseService.selectCmmCodeDetail(CodeVO); + model.addAttribute("restdeCode", restdeCodeList); + + return "egovframework/com/sym/cal/EgovRestdeModify"; + } + + restde.setLastUpdusrId(loginVO.getUniqId()); + restdeManageService.updateRestde(restde); + return "forward:/sym/cal/EgovRestdeList.do"; + } else { + return "forward:/sym/cal/EgovRestdeList.do"; + } + } + + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/uss/olp/qim/service/EgovQustnrItemManageService.java b/src/main/java/egovframework/com/uss/olp/qim/service/EgovQustnrItemManageService.java new file mode 100644 index 0000000..bce2460 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qim/service/EgovQustnrItemManageService.java @@ -0,0 +1,78 @@ +package egovframework.com.uss.olp.qim.service; + +import java.util.List; + +import egovframework.com.cmm.ComDefaultVO; +/** + * 설문항목관리를 처리하는 Service Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +public interface EgovQustnrItemManageService { + + /** + * 설문템플릿(을)를 목록을 조회한다. + * @param qustnrItemManageVO - 설문항목 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrTmplatManageList(QustnrItemManageVO qustnrItemManageVO) throws Exception; + + /** + * 설문항목 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrItemManageList(ComDefaultVO searchVO) throws Exception; + + /** + * 설문항목를(을) 상세조회 한다. + * @param qustnrItemManageVO - 설문항목 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrItemManageDetail(QustnrItemManageVO qustnrItemManageVO) throws Exception; + + /** + * 설문항목를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrItemManageListCnt(ComDefaultVO searchVO) throws Exception; + + /** + * 설문항목를(을) 등록한다. + * @param qustnrItemManageVO - 설문항목 정보 담김 VO + * @throws Exception + */ + void insertQustnrItemManage(QustnrItemManageVO qustnrItemManageVO) throws Exception; + + /** + * 설문항목를(을) 수정한다. + * @param qustnrItemManageVO - 설문항목 정보 담김 VO + * @throws Exception + */ + void updateQustnrItemManage(QustnrItemManageVO qustnrItemManageVO) throws Exception; + + /** + * 설문항목를(을) 삭제한다. + * @param qustnrItemManageVO - 설문항목 정보 담김 VO + * @throws Exception + */ + void deleteQustnrItemManage(QustnrItemManageVO qustnrItemManageVO) throws Exception; + + +} diff --git a/src/main/java/egovframework/com/uss/olp/qim/service/QustnrItemManageVO.java b/src/main/java/egovframework/com/uss/olp/qim/service/QustnrItemManageVO.java new file mode 100644 index 0000000..a81a5bc --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qim/service/QustnrItemManageVO.java @@ -0,0 +1,253 @@ +package egovframework.com.uss.olp.qim.service; + +import java.io.Serializable; +/** + * 설문항목관리 VO Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +public class QustnrItemManageVO implements Serializable { + + private static final long serialVersionUID = -8233519594470362395L; + + /** 설문문항 아이디 */ + private String qestnrQesitmId = ""; + + /** 설문지 아이디 */ + private String qestnrId = ""; + + /** 항목순번 */ + private String iemSn = ""; + + /** 항목내용 */ + private String qustnrIemId = ""; + + /** 설문항목아이디 */ + private String iemCn = ""; + + /** 키타답변여부 */ + private String etcAnswerAt = ""; + + /** 설문항목(을)를 아이디 */ + private String qestnrTmplatId = ""; + + /** 최초등록시점 */ + private String frstRegisterPnttm = ""; + + /** 최초등록아이디 */ + private String frstRegisterId = ""; + + /** 최종수정일 */ + private String lastUpdusrPnttm = ""; + + /** 최종수정자 아이디 */ + private String lastUpdusrId = ""; + + /** 컨트롤 명령어 */ + private String cmd = ""; + + /** + * qestnrQesitmId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrQesitmId() { + return qestnrQesitmId; + } + + /** + * qestnrQesitmId attribute 값을 설정한다. + * @return qestnrQesitmId String + */ + public void setQestnrQesitmId(String qestnrQesitmId) { + this.qestnrQesitmId = qestnrQesitmId; + } + + /** + * qestnrId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrId() { + return qestnrId; + } + + /** + * qestnrId attribute 값을 설정한다. + * @return qestnrId String + */ + public void setQestnrId(String qestnrId) { + this.qestnrId = qestnrId; + } + + /** + * iemSn attribute 를 리턴한다. + * @return the String + */ + public String getIemSn() { + return iemSn; + } + + /** + * iemSn attribute 값을 설정한다. + * @return iemSn String + */ + public void setIemSn(String iemSn) { + this.iemSn = iemSn; + } + + /** + * qustnrIemId attribute 를 리턴한다. + * @return the String + */ + public String getQustnrIemId() { + return qustnrIemId; + } + + /** + * qustnrIemId attribute 값을 설정한다. + * @return qustnrIemId String + */ + public void setQustnrIemId(String qustnrIemId) { + this.qustnrIemId = qustnrIemId; + } + + /** + * iemCn attribute 를 리턴한다. + * @return the String + */ + public String getIemCn() { + return iemCn; + } + + /** + * iemCn attribute 값을 설정한다. + * @return iemCn String + */ + public void setIemCn(String iemCn) { + this.iemCn = iemCn; + } + + /** + * etcAnswerAt attribute 를 리턴한다. + * @return the String + */ + public String getEtcAnswerAt() { + return etcAnswerAt; + } + + /** + * etcAnswerAt attribute 값을 설정한다. + * @return etcAnswerAt String + */ + public void setEtcAnswerAt(String etcAnswerAt) { + this.etcAnswerAt = etcAnswerAt; + } + + /** + * qestnrTmplatId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrTmplatId() { + return qestnrTmplatId; + } + + /** + * qestnrTmplatId attribute 값을 설정한다. + * @return qestnrTmplatId String + */ + public void setQestnrTmplatId(String qestnrTmplatId) { + this.qestnrTmplatId = qestnrTmplatId; + } + + /** + * frstRegisterPnttm attribute 를 리턴한다. + * @return the String + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * frstRegisterPnttm attribute 값을 설정한다. + * @return frstRegisterPnttm String + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } + + /** + * frstRegisterId attribute 를 리턴한다. + * @return the String + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * @return frstRegisterId String + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * lastUpdusrPnttm attribute 를 리턴한다. + * @return the String + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * lastUpdusrPnttm attribute 값을 설정한다. + * @return lastUpdusrPnttm String + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * lastUpdusrId attribute 를 리턴한다. + * @return the String + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * @return lastUpdusrId String + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + /** + * cmd attribute 를 리턴한다. + * @return the String + */ + public String getCmd() { + return cmd; + } + + /** + * cmd attribute 값을 설정한다. + * @return cmd String + */ + public void setCmd(String cmd) { + this.cmd = cmd; + } + + +} diff --git a/src/main/java/egovframework/com/uss/olp/qim/service/impl/EgovQustnrItemManageServiceImpl.java b/src/main/java/egovframework/com/uss/olp/qim/service/impl/EgovQustnrItemManageServiceImpl.java new file mode 100644 index 0000000..285718b --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qim/service/impl/EgovQustnrItemManageServiceImpl.java @@ -0,0 +1,120 @@ +package egovframework.com.uss.olp.qim.service.impl; + +import java.util.List; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.uss.olp.qim.service.EgovQustnrItemManageService; +import egovframework.com.uss.olp.qim.service.QustnrItemManageVO; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; +/** + * 설문항목관리를 처리하는 ServiceImpl Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +@Service("egovQustnrItemManageService") +public class EgovQustnrItemManageServiceImpl extends EgovAbstractServiceImpl implements EgovQustnrItemManageService{ + + //final private Log log = LogFactory.getLog(this.getClass()); + + @Resource(name="qustnrItemManageDao") + private QustnrItemManageDao dao; + + @Resource(name="egovQustnrItemManageIdGnrService") + private EgovIdGnrService idgenService; + + /** + * 설문템플릿(을)를 목록을 조회한다. + * @param qustnrItemManageVO - 설문항목 정보 담김 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrTmplatManageList(QustnrItemManageVO qustnrItemManageVO) throws Exception{ + return dao.selectQustnrTmplatManageList(qustnrItemManageVO); + } + + + /** + * 설문항목 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrItemManageList(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrItemManageList(searchVO); + } + + /** + * 설문항목를(을) 상세조회 한다. + * @param QustnrItemManage - 회정정보가 담김 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrItemManageDetail(QustnrItemManageVO qustnrItemManageVO) throws Exception{ + return dao.selectQustnrItemManageDetail(qustnrItemManageVO); + } + + /** + * 설문항목를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + @Override + public int selectQustnrItemManageListCnt(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrItemManageListCnt(searchVO); + } + + /** + * 설문항목를(을) 등록한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void insertQustnrItemManage(QustnrItemManageVO qustnrItemManageVO) throws Exception { + String sMakeId = idgenService.getNextStringId(); + + qustnrItemManageVO.setQustnrIemId(sMakeId); + + dao.insertQustnrItemManage(qustnrItemManageVO); + } + + /** + * 설문항목를(을) 수정한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void updateQustnrItemManage(QustnrItemManageVO qustnrItemManageVO) throws Exception{ + dao.updateQustnrItemManage(qustnrItemManageVO); + } + + /** + * 설문항목를(을) 삭제한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void deleteQustnrItemManage(QustnrItemManageVO qustnrItemManageVO) throws Exception{ + dao.deleteQustnrItemManage(qustnrItemManageVO); + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qim/service/impl/QustnrItemManageDao.java b/src/main/java/egovframework/com/uss/olp/qim/service/impl/QustnrItemManageDao.java new file mode 100644 index 0000000..3d9024f --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qim/service/impl/QustnrItemManageDao.java @@ -0,0 +1,101 @@ +package egovframework.com.uss.olp.qim.service.impl; + +import java.util.List; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; +import egovframework.com.uss.olp.qim.service.QustnrItemManageVO; + +import org.springframework.stereotype.Repository; +/** + * 설문항목관리를 처리하는 Dao Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +@Repository("qustnrItemManageDao") +public class QustnrItemManageDao extends EgovComAbstractDAO { + + + /** + * 설문템플릿(을)를 목록을 조회한다. + * @param qustnrItemManageVO - 설문항목 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrTmplatManageList(QustnrItemManageVO qustnrItemManageVO) throws Exception{ + return list("QustnrItemManage.selectQustnrTmplatManage", qustnrItemManageVO); + } + + /** + * 설문항목 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrItemManageList(ComDefaultVO searchVO) throws Exception{ + return list("QustnrItemManage.selectQustnrItemManage", searchVO); + } + + /** + * 설문항목를(을) 상세조회 한다. + * @param qustnrItemManageVO - 설문항목 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrItemManageDetail(QustnrItemManageVO qustnrItemManageVO) throws Exception{ + return list("QustnrItemManage.selectQustnrItemManageDetail", qustnrItemManageVO); + } + + /** + * 설문항목를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrItemManageListCnt(ComDefaultVO searchVO) throws Exception{ + return (Integer)select("QustnrItemManage.selectQustnrItemManageCnt", searchVO); + } + + /** + * 설문항목를(을) 등록한다. + * @param qqustnrItemManageVO - 설문항목 정보 담김 VO + * @throws Exception + */ + public void insertQustnrItemManage(QustnrItemManageVO qustnrItemManageVO) throws Exception{ + insert("QustnrItemManage.insertQustnrItemManage", qustnrItemManageVO); + } + + /** + * 설문항목를(을) 수정한다. + * @param qustnrItemManageVO - 설문항목 정보 담김 VO + * @throws Exception + */ + public void updateQustnrItemManage(QustnrItemManageVO qustnrItemManageVO) throws Exception{ + insert("QustnrItemManage.updateQustnrItemManage", qustnrItemManageVO); + } + + /** + * 설문항목를(을) 삭제한다. + * @param qustnrItemManageVO - 설문항목 정보 담김 VO + * @throws Exception + */ + public void deleteQustnrItemManage(QustnrItemManageVO qustnrItemManageVO) throws Exception{ + //설문조사(설문결과) 삭제 + delete("QustnrItemManage.deleteQustnrRespondInfo", qustnrItemManageVO); + + //설문항목 삭제 + insert("QustnrItemManage.deleteQustnrItemManage", qustnrItemManageVO); + + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qim/web/EgovQustnrItemManageController.java b/src/main/java/egovframework/com/uss/olp/qim/web/EgovQustnrItemManageController.java new file mode 100644 index 0000000..def2c6a --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qim/web/EgovQustnrItemManageController.java @@ -0,0 +1,311 @@ +package egovframework.com.uss.olp.qim.web; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.EgovMessageSource; +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.annotation.IncludedInfo; +import egovframework.com.cmm.util.EgovUserDetailsHelper; +import egovframework.com.uss.olp.qim.service.EgovQustnrItemManageService; +import egovframework.com.uss.olp.qim.service.QustnrItemManageVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springmodules.validation.commons.DefaultBeanValidator; +/** + * 설문항목관리를 처리하는 Controller Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *   2011.8.26	정진오			IncludedInfo annotation 추가
    + *
    + * 
    + */ + +@Controller +public class EgovQustnrItemManageController { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovQustnrItemManageController.class); + + @Autowired + private DefaultBeanValidator beanValidator; + + /** EgovMessageSource */ + @Resource(name="egovMessageSource") + EgovMessageSource egovMessageSource; + + @Resource(name = "egovQustnrItemManageService") + private EgovQustnrItemManageService egovQustnrItemManageService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** + * 설문항목 팝업 목록을 조회한다. + * @param searchVO + * @param commandMap + * @param qustnrItemManageVO + * @param model + * @return "egovframework/com/uss/olp/qim/EgovQustnrItemManageListPopup" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qim/EgovQustnrItemManageListPopup.do") + public String egovQustnrItemManageListPopup(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + QustnrItemManageVO qustnrItemManageVO, ModelMap model) throws Exception { + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + if(sCmd.equals("del")){ + egovQustnrItemManageService.deleteQustnrItemManage(qustnrItemManageVO); + } + + /** EgovPropertyService.sample */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("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()); + + List sampleList = egovQustnrItemManageService.selectQustnrItemManageList(searchVO); + model.addAttribute("resultList", sampleList); + + model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); + model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); + + int totCnt = egovQustnrItemManageService.selectQustnrItemManageListCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "egovframework/com/uss/olp/qim/EgovQustnrItemManageListPopup"; + } + + /** + * 설문항목 목록을 조회한다. + * @param searchVO + * @param commandMap + * @param qustnrItemManageVO + * @param model + * @return "egovframework/com/uss/olp/qim/EgovQustnrItemManageList" + * @throws Exception + */ + @IncludedInfo(name="항목관리", order = 640 ,gid = 50) + @RequestMapping(value="/_mngr_/qim/EgovQustnrItemManageList.do") + public String egovQustnrItemManageList(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + QustnrItemManageVO qustnrItemManageVO, ModelMap model) throws Exception { + + String sSearchMode = commandMap.get("searchMode") == null ? "" : (String)commandMap.get("searchMode"); + + //설문문항에 넘어온 건에 대해 조회 + if(sSearchMode.equals("Y")){ +// searchVO.setSearchCondition("QUSTNR_QESITM_ID");//qestnrQesitmId + searchVO.setSearchKeyword0(qustnrItemManageVO.getQestnrQesitmId()); + } + + /** EgovPropertyService.sample */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("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()); + + List sampleList = egovQustnrItemManageService.selectQustnrItemManageList(searchVO); + model.addAttribute("resultList", sampleList); + + model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); + model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); + + int totCnt = egovQustnrItemManageService.selectQustnrItemManageListCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "egovframework/com/uss/olp/qim/EgovQustnrItemManageList"; + } + + /** + * 설문항목 목록을 상세조회 조회한다. + * @param searchVO + * @param qustnrItemManageVO + * @param commandMap + * @param model + * @return "/uss/olp/qim/EgovQustnrItemManageDetail" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qim/EgovQustnrItemManageDetail.do") + public String egovQustnrItemManageDetail(@ModelAttribute("searchVO") ComDefaultVO searchVO, QustnrItemManageVO qustnrItemManageVO, + @RequestParam Map commandMap, ModelMap model) throws Exception { + + String sLocationUrl = "egovframework/com/uss/olp/qim/EgovQustnrItemManageDetail"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + + if(sCmd.equals("del")){ + + egovQustnrItemManageService.deleteQustnrItemManage(qustnrItemManageVO); +// sLocationUrl = "redirect:/_mngr_/qim/EgovQustnrItemManageList.do"; + return CommUtil.doCompleteUrl(model, "성공", "삭제 되었습니다.", "/_mngr_/qim/EgovQustnrItemManageList.do"); + + } else { + + List sampleList = egovQustnrItemManageService.selectQustnrItemManageDetail(qustnrItemManageVO); + model.addAttribute("resultList", sampleList); + } + + return sLocationUrl; + } + + /** + * 설문항목를 수정한다. + * @param searchVO + * @param commandMap + * @param qustnrItemManageVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/qim/EgovQustnrItemManageModify" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qim/EgovQustnrItemManageModify.do") + public String qustnrItemManageModify(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + @ModelAttribute("qustnrItemManageVO") QustnrItemManageVO qustnrItemManageVO, BindingResult bindingResult, ModelMap model) throws Exception { + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + + String sLocationUrl = "egovframework/com/uss/olp/qim/EgovQustnrItemManageModify"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + + if(sCmd.equals("save")){ + + //서버 validate 체크 + beanValidator.validate(qustnrItemManageVO, bindingResult); + if(bindingResult.hasErrors()){ + //설문항목(을)를 정보 불러오기 + List listQustnrTmplat = egovQustnrItemManageService.selectQustnrTmplatManageList(qustnrItemManageVO); + model.addAttribute("listQustnrTmplat", listQustnrTmplat); + //게시물 불러오기 + List sampleList = egovQustnrItemManageService.selectQustnrItemManageDetail(qustnrItemManageVO); + model.addAttribute("resultList", sampleList); + + return "egovframework/com/uss/olp/qim/EgovQustnrItemManageModify"; + } + + //아이디 설정 + qustnrItemManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrItemManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrItemManageService.updateQustnrItemManage(qustnrItemManageVO); +// sLocationUrl = "redirect:/_mngr_/qim/EgovQustnrItemManageList.do"; + return CommUtil.doCompleteUrl(model, "성공", "수정 되었습니다.", "/_mngr_/qim/EgovQustnrItemManageDetail.do"); + + } else { + + List sampleList = egovQustnrItemManageService.selectQustnrItemManageDetail(qustnrItemManageVO); + model.addAttribute("resultList", sampleList); + + //설문항목(을)를 정보 불러오기 + List listQustnrTmplat = egovQustnrItemManageService.selectQustnrTmplatManageList(qustnrItemManageVO); + model.addAttribute("listQustnrTmplat", listQustnrTmplat); + } + + return sLocationUrl; + } + + /** + * 설문항목를 등록한다. + * @param searchVO + * @param commandMap + * @param qustnrItemManageVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/qim/EgovQustnrItemManageRegist" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qim/EgovQustnrItemManageRegist.do") + public String qustnrItemManageRegist(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + @ModelAttribute("qustnrItemManageVO") QustnrItemManageVO qustnrItemManageVO, BindingResult bindingResult, ModelMap model) throws Exception { + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + + String sLocationUrl = "egovframework/com/uss/olp/qim/EgovQustnrItemManageRegist"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + LOGGER.info("cmd => {}", sCmd); + + if(sCmd.equals("save")){ + + //서버 validate 체크 + beanValidator.validate(qustnrItemManageVO, bindingResult); + if(bindingResult.hasErrors()){ + //설문항목(을)를 정보 불러오기 + List listQustnrTmplat = egovQustnrItemManageService.selectQustnrTmplatManageList(qustnrItemManageVO); + model.addAttribute("listQustnrTmplat", listQustnrTmplat); + return "egovframework/com/uss/olp/qim/EgovQustnrItemManageRegist"; + } + + //아이디 설정 + qustnrItemManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrItemManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrItemManageService.insertQustnrItemManage(qustnrItemManageVO); +// sLocationUrl = "redirect:/_mngr_/qim/EgovQustnrItemManageList.do"; + return CommUtil.doCompleteUrl(model, "성공", "저장 되었습니다.", "/_mngr_/qim/EgovQustnrItemManageList.do"); + + } else { + + //설문항목(을)를 정보 불러오기 + List listQustnrTmplat = egovQustnrItemManageService.selectQustnrTmplatManageList(qustnrItemManageVO); + model.addAttribute("listQustnrTmplat", listQustnrTmplat); + } + + return sLocationUrl; + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qmc/service/EgovQustnrManageService.java b/src/main/java/egovframework/com/uss/olp/qmc/service/EgovQustnrManageService.java new file mode 100644 index 0000000..d5ebe33 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qmc/service/EgovQustnrManageService.java @@ -0,0 +1,86 @@ +package egovframework.com.uss.olp.qmc.service; + +import java.util.List; + +import egovframework.com.cmm.ComDefaultVO; +/** + * 설문관리를 처리하는 Service Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +public interface EgovQustnrManageService { + + /** + * 설문템플릿 목록을 조회한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrTmplatManageList(QustnrManageVO qustnrManageVO) throws Exception; + + /** + * 설문관리 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrManageList(ComDefaultVO searchVO) throws Exception; + + /** + * 설문관리를(을) 상세조회 한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrManageDetail(QustnrManageVO qustnrManageVO) throws Exception; + + /** + * 설문관리를 상세조회(Model) 한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @return List + * @throws Exception + */ + public QustnrManageVO selectQustnrManageDetailModel(QustnrManageVO qustnrManageVO) throws Exception ; + + /** + * 설문관리를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrManageListCnt(ComDefaultVO searchVO) throws Exception; + + /** + * 설문관리를(을) 등록한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @throws Exception + */ + void insertQustnrManage(QustnrManageVO qustnrManageVO) throws Exception; + + /** + * 설문관리를(을) 수정한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @throws Exception + */ + void updateQustnrManage(QustnrManageVO qustnrManageVO) throws Exception; + + /** + * 설문관리를(을) 삭제한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @throws Exception + */ + void deleteQustnrManage(QustnrManageVO qustnrManageVO) throws Exception; + + +} diff --git a/src/main/java/egovframework/com/uss/olp/qmc/service/QustnrManageVO.java b/src/main/java/egovframework/com/uss/olp/qmc/service/QustnrManageVO.java new file mode 100644 index 0000000..d972914 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qmc/service/QustnrManageVO.java @@ -0,0 +1,336 @@ +package egovframework.com.uss.olp.qmc.service; + +import java.io.Serializable; +/** + * 설문관리 VO Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +public class QustnrManageVO implements Serializable { + + private static final long serialVersionUID = 1525075114445382036L; + + /** 설문지ID */ + private String qestnrId = ""; + + /** 설문제목 */ + private String qestnrSj = ""; + + /** 설문목적 */ + private String qestnrPurps = ""; + + /** 설문목적 Notag*/ + private String qestnrPurpsNotag = ""; + + /** 설문작성안내내용 */ + private String qestnrWritngGuidanceCn = ""; + + /** 설문작성안내내용 Notag*/ + private String qestnrWritngNotag = ""; + + /** 설문시작일자 */ + private String qestnrBeginDe = ""; + + /** 설문종료일자 */ + private String qestnrEndDe = ""; + + /** 설문참여 인원 */ + private String respondCnt = ""; + + /** 설문대상 */ + private String qestnrTrget = ""; + + /** 설문대상명 */ + private String qestnrTrgetNm = ""; + + /** 설문시작일자 */ + private String qestnrTmplatId = ""; + + /** 설문사용여부 */ + private String qestnrUseAt = ""; + + /** 설문템플릿유형 */ + private String qestnrTmplatTy = ""; + + /** 최초등록시점 */ + private String frstRegisterPnttm = ""; + + /** 최초등록자아이디 */ + private String frstRegisterId = ""; + + /** 최종수정시점 */ + private String lastUpdusrPnttm = ""; + + /** 최종수정자아이디 */ + private String lastUpdusrId = ""; + + /** 설문기간 여부 */ + private String periodDiv = ""; + + /** + * qestnrId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrId() { + return qestnrId; + } + + /** + * qestnrId attribute 값을 설정한다. + * @return qestnrId String + */ + public void setQestnrId(String qestnrId) { + this.qestnrId = qestnrId; + } + + /** + * qestnrSj attribute 를 리턴한다. + * @return the String + */ + public String getQestnrSj() { + return qestnrSj; + } + + /** + * qestnrSj attribute 값을 설정한다. + * @return qestnrSj String + */ + public void setQestnrSj(String qestnrSj) { + this.qestnrSj = qestnrSj; + } + + /** + * qestnrPurps attribute 를 리턴한다. + * @return the String + */ + public String getQestnrPurps() { + return qestnrPurps; + } + + /** + * qestnrPurps attribute 값을 설정한다. + * @return qestnrPurps String + */ + public void setQestnrPurps(String qestnrPurps) { + this.qestnrPurps = qestnrPurps; + } + + public String getQestnrPurpsNotag() { + return qestnrPurpsNotag; + } + + public void setQestnrPurpsNotag(String qestnrPurpsNotag) { + this.qestnrPurpsNotag = qestnrPurpsNotag; + } + + /** + * qestnrWritngGuidanceCn attribute 를 리턴한다. + * @return the String + */ + public String getQestnrWritngGuidanceCn() { + return qestnrWritngGuidanceCn; + } + + /** + * qestnrWritngGuidanceCn attribute 값을 설정한다. + * @return qestnrWritngGuidanceCn String + */ + public void setQestnrWritngGuidanceCn(String qestnrWritngGuidanceCn) { + this.qestnrWritngGuidanceCn = qestnrWritngGuidanceCn; + } + + public String getQestnrWritngNotag() { + return qestnrWritngNotag; + } + + public void setQestnrWritngNotag(String qestnrWritngNotag) { + this.qestnrWritngNotag = qestnrWritngNotag; + } + + /** + * qestnrBeginDe attribute 를 리턴한다. + * @return the String + */ + public String getQestnrBeginDe() { + return qestnrBeginDe; + } + + /** + * qestnrBeginDe attribute 값을 설정한다. + * @return qestnrBeginDe String + */ + public void setQestnrBeginDe(String qestnrBeginDe) { + this.qestnrBeginDe = qestnrBeginDe; + } + + /** + * qestnrEndDe attribute 를 리턴한다. + * @return the String + */ + public String getQestnrEndDe() { + return qestnrEndDe; + } + + /** + * qestnrEndDe attribute 값을 설정한다. + * @return qestnrEndDe String + */ + public void setQestnrEndDe(String qestnrEndDe) { + this.qestnrEndDe = qestnrEndDe; + } + + public String getRespondCnt() { + return respondCnt; + } + + public void setRespondCnt(String respondCnt) { + this.respondCnt = respondCnt; + } + + /** + * qestnrTrget attribute 를 리턴한다. + * @return the String + */ + public String getQestnrTrget() { + return qestnrTrget; + } + + /** + * qestnrTrget attribute 값을 설정한다. + * @return qestnrTrget String + */ + public void setQestnrTrget(String qestnrTrget) { + this.qestnrTrget = qestnrTrget; + } + + public String getQestnrTrgetNm() { + return qestnrTrgetNm; + } + + public void setQestnrTrgetNm(String qestnrTrgetNm) { + this.qestnrTrgetNm = qestnrTrgetNm; + } + + /** + * qestnrTmplatId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrTmplatId() { + return qestnrTmplatId; + } + + /** + * qestnrTmplatId attribute 값을 설정한다. + * @return qestnrTmplatId String + */ + public void setQestnrTmplatId(String qestnrTmplatId) { + this.qestnrTmplatId = qestnrTmplatId; + } + + public String getQestnrUseAt() { + return qestnrUseAt; + } + + public void setQestnrUseAt(String qestnrUseAt) { + this.qestnrUseAt = qestnrUseAt; + } + + /** + * qestnrTmplatTy attribute 를 리턴한다. + * @return the String + */ + public String getQestnrTmplatTy() { + return qestnrTmplatTy; + } + + /** + * qestnrTmplatTy attribute 값을 설정한다. + * @return qestnrTmplatTy String + */ + public void setQestnrTmplatTy(String qestnrTmplatTy) { + this.qestnrTmplatTy = qestnrTmplatTy; + } + + /** + * frstRegisterPnttm attribute 를 리턴한다. + * @return the String + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * frstRegisterPnttm attribute 값을 설정한다. + * @return frstRegisterPnttm String + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } + + /** + * frstRegisterId attribute 를 리턴한다. + * @return the String + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * @return frstRegisterId String + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * lastUpdusrPnttm attribute 를 리턴한다. + * @return the String + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * lastUpdusrPnttm attribute 값을 설정한다. + * @return lastUpdusrPnttm String + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * lastUpdusrId attribute 를 리턴한다. + * @return the String + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * @return lastUpdusrId String + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + public String getPeriodDiv() { + return periodDiv; + } + + public void setPeriodDiv(String periodDiv) { + this.periodDiv = periodDiv; + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qmc/service/impl/EgovQustnrManageServiceImpl.java b/src/main/java/egovframework/com/uss/olp/qmc/service/impl/EgovQustnrManageServiceImpl.java new file mode 100644 index 0000000..71e32f1 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qmc/service/impl/EgovQustnrManageServiceImpl.java @@ -0,0 +1,132 @@ +package egovframework.com.uss.olp.qmc.service.impl; + +import java.util.List; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.uss.olp.qmc.service.EgovQustnrManageService; +import egovframework.com.uss.olp.qmc.service.QustnrManageVO; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; +/** + * 설문관리를 처리하는 ServiceImpl Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +@Service("egovQustnrManageService") +public class EgovQustnrManageServiceImpl extends EgovAbstractServiceImpl implements EgovQustnrManageService{ + + //final private Log log = LogFactory.getLog(this.getClass()); + + @Resource(name="qustnrManageDao") + private QustnrManageDao dao; + + @Resource(name="egovQustnrManageIdGnrService") + private EgovIdGnrService idgenService; + + + /** + * 설문템플릿 목록을 조회한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrTmplatManageList(QustnrManageVO qustnrManageVO) throws Exception{ + return dao.selectQustnrTmplatManageList(qustnrManageVO); + } + + + /** + * 설문관리 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrManageList(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrManageList(searchVO); + } + + /** + * 설문관리를 상세조회(Model) 한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @return List + * @throws Exception + */ + @Override + public QustnrManageVO selectQustnrManageDetailModel(QustnrManageVO qustnrManageVO) throws Exception { + return dao.selectQustnrManageDetailModel(qustnrManageVO); + } + + /** + * 설문관리를(을) 상세조회 한다. + * @param QustnrManage - 회정정보가 담김 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrManageDetail(QustnrManageVO qustnrManageVO) throws Exception{ + return dao.selectQustnrManageDetail(qustnrManageVO); + } + + /** + * 설문관리를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + @Override + public int selectQustnrManageListCnt(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrManageListCnt(searchVO); + } + + /** + * 설문관리를(을) 등록한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void insertQustnrManage(QustnrManageVO qustnrManageVO) throws Exception { + String sMakeId = idgenService.getNextStringId(); + + qustnrManageVO.setQestnrId(sMakeId); + + dao.insertQustnrManage(qustnrManageVO); + } + + /** + * 설문관리를(을) 수정한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void updateQustnrManage(QustnrManageVO qustnrManageVO) throws Exception{ + dao.updateQustnrManage(qustnrManageVO); + } + + /** + * 설문관리를(을) 삭제한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void deleteQustnrManage(QustnrManageVO qustnrManageVO) throws Exception{ + dao.deleteQustnrManage(qustnrManageVO); + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qmc/service/impl/QustnrManageDao.java b/src/main/java/egovframework/com/uss/olp/qmc/service/impl/QustnrManageDao.java new file mode 100644 index 0000000..b73358a --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qmc/service/impl/QustnrManageDao.java @@ -0,0 +1,114 @@ +package egovframework.com.uss.olp.qmc.service.impl; + +import java.util.List; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; +import egovframework.com.uss.olp.qmc.service.QustnrManageVO; + +import org.springframework.stereotype.Repository; +/** + * 설문관리를 처리하는 Dao Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +@Repository("qustnrManageDao") +public class QustnrManageDao extends EgovComAbstractDAO { + + /** + * 설문템플릿 목록을 조회한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrTmplatManageList(QustnrManageVO qustnrManageVO) throws Exception{ + return list("QustnrManage.selectQustnrTmplatManage", qustnrManageVO); + } + + /** + * 설문관리 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrManageList(ComDefaultVO searchVO) throws Exception{ + return list("QustnrManage.selectQustnrManage", searchVO); + } + + /** + * 설문관리를 상세조회(Model) 한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @return List + * @throws Exception + */ + public QustnrManageVO selectQustnrManageDetailModel(QustnrManageVO qustnrManageVO) throws Exception { + return (QustnrManageVO) select("QustnrManage.selectQustnrManageDetailModel", qustnrManageVO); + } + + /** + * 설문관리를(을) 상세조회 한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrManageDetail(QustnrManageVO qustnrManageVO) throws Exception{ + return list("QustnrManage.selectQustnrManageDetail", qustnrManageVO); + } + + /** + * 설문관리를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrManageListCnt(ComDefaultVO searchVO) throws Exception{ + return (Integer)select("QustnrManage.selectQustnrManageCnt", searchVO); + } + + /** + * 설문관리를(을) 등록한다. + * @param qqustnrManageVO - 설문관리 정보 담김 VO + * @throws Exception + */ + public void insertQustnrManage(QustnrManageVO qustnrManageVO) throws Exception{ + insert("QustnrManage.insertQustnrManage", qustnrManageVO); + } + + /** + * 설문관리를(을) 수정한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @throws Exception + */ + public void updateQustnrManage(QustnrManageVO qustnrManageVO) throws Exception{ + insert("QustnrManage.updateQustnrManage", qustnrManageVO); + } + + /** + * 설문관리를(을) 삭제한다. + * @param qustnrManageVO - 설문관리 정보 담김 VO + * @throws Exception + */ + public void deleteQustnrManage(QustnrManageVO qustnrManageVO) throws Exception{ + //설문응답자 삭제 + delete("QustnrManage.deleteQustnrRespondManage", qustnrManageVO); + //설문조사(설문결과) 삭제 + delete("QustnrManage.deleteQustnrRespondInfo", qustnrManageVO); + //설문항목 삭제 + delete("QustnrManage.deleteQustnrItemManage", qustnrManageVO); + //설문문항 삭제 + delete("QustnrManage.deleteQustnrQestnManage", qustnrManageVO); + //설문관리 삭제 + delete("QustnrManage.deleteQustnrManage", qustnrManageVO); + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qmc/web/EgovQustnrManageController.java b/src/main/java/egovframework/com/uss/olp/qmc/web/EgovQustnrManageController.java new file mode 100644 index 0000000..7330fd4 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qmc/web/EgovQustnrManageController.java @@ -0,0 +1,354 @@ +package egovframework.com.uss.olp.qmc.web; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.EgovMessageSource; +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.annotation.IncludedInfo; +import egovframework.com.cmm.service.EgovCmmUseService; +import egovframework.com.cmm.util.EgovUserDetailsHelper; +import egovframework.com.sym.bat.service.BatchOpert; +import egovframework.com.uss.olp.qmc.service.EgovQustnrManageService; +import egovframework.com.uss.olp.qmc.service.QustnrManageVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springmodules.validation.commons.DefaultBeanValidator; +/** + * 설문관리를 처리하는 Controller Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *   2011.8.26	정진오			IncludedInfo annotation 추가
    + *
    + * 
    + */ + +@Controller +public class EgovQustnrManageController { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovQustnrManageController.class); + + @Autowired + private DefaultBeanValidator beanValidator; + + /** EgovMessageSource */ + @Resource(name="egovMessageSource") + EgovMessageSource egovMessageSource; + + @Resource(name = "egovQustnrManageService") + private EgovQustnrManageService egovQustnrManageService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + @Resource(name="EgovCmmUseService") + private EgovCmmUseService cmmUseService; + + /** + * 설문관리 팝업 프레임을 조회한다. + * @param searchVO + * @param commandMap + * @param qustnrManageVO + * @param model + * @return "egovframework/com/uss/olp/qmc/EgovQustnrManageListPopupFrame" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qmc/EgovQustnrManageListPopupFrame.do") + public String egovQustnrManageListPopupFrame(@ModelAttribute("searchVO") ComDefaultVO searchVO, HttpServletRequest request, ModelMap model) throws Exception { + + String schDiv = CommUtil.isNull(request.getParameter("schDiv"), ""); + model.addAttribute("schDiv", schDiv); + + return "egovframework/com/uss/olp/qmc/EgovQustnrManageListPopupFrame"; + } + + /** + * 설문관리 팝업 목록을 조회한다. + * @param searchVO + * @param commandMap + * @param qustnrManageVO + * @param model + * @return "egovframework/com/uss/olp/qmc/EgovQustnrManageListPopup" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qmc/EgovQustnrManageListPopup.do") + public String egovQustnrManageListPopup(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + QustnrManageVO qustnrManageVO, ModelMap model) throws Exception { + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + if(sCmd.equals("del")){ + egovQustnrManageService.deleteQustnrManage(qustnrManageVO); + } + + /** EgovPropertyService.sample */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("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()); + + List sampleList = egovQustnrManageService.selectQustnrManageList(searchVO); + model.addAttribute("resultList", sampleList); + + model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); + model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); + + int totCnt = egovQustnrManageService.selectQustnrManageListCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "egovframework/com/uss/olp/qmc/EgovQustnrManageListPopup"; + } + + /** + * 설문관리 목록을 조회한다. + * @param searchVO + * @param commandMap + * @param qustnrManageVO + * @param model + * @return "/uss/olp/qmc/EgovQustnrManageList" + * @throws Exception + */ + @IncludedInfo(name="설문관리", order = 590 ,gid = 50) + @RequestMapping(value="/_mngr_/qmc/EgovQustnrManageList.do") + public String egovQustnrManageList(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + QustnrManageVO qustnrManageVO, ModelMap model) throws Exception { + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + if(sCmd.equals("del")){ + egovQustnrManageService.deleteQustnrManage(qustnrManageVO); + } + + /** EgovPropertyService.sample */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("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()); + + List sampleList = egovQustnrManageService.selectQustnrManageList(searchVO); + model.addAttribute("resultList", sampleList); + + model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); + model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); + + int totCnt = egovQustnrManageService.selectQustnrManageListCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "egovframework/com/uss/olp/qmc/EgovQustnrManageList"; + } + + /** + * 설문관리 목록을 상세조회 조회한다. + * @param searchVO + * @param qustnrManageVO + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/qmc/EgovQustnrManageDetail"; + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qmc/EgovQustnrManageDetail.do") + public String egovQustnrManageDetail(@ModelAttribute("searchVO") ComDefaultVO searchVO, QustnrManageVO qustnrManageVO, + @RequestParam Map commandMap, ModelMap model) throws Exception { + + String sLocationUrl = "egovframework/com/uss/olp/qmc/EgovQustnrManageDetail"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + + if(sCmd.equals("del")){ + + egovQustnrManageService.deleteQustnrManage(qustnrManageVO); +// sLocationUrl = "redirect:/_mngr_/qmc/EgovQustnrManageList.do"; + return CommUtil.doCompleteUrl(model, "성공", "삭제 되었습니다.", "/_mngr_/qmc/EgovQustnrManageList.do"); + + } else { + + //공통코드 직업유형 조회 + ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); + voComCode.setCodeId("COM034"); + List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode034", listComCode); + + List sampleList = egovQustnrManageService.selectQustnrManageDetail(qustnrManageVO); + model.addAttribute("resultList", sampleList); + } + + return sLocationUrl; + } + + /** + * 설문관리를 수정한다. + * @param searchVO + * @param commandMap + * @param qustnrManageVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/qmc/EgovQustnrManageModify" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qmc/EgovQustnrManageModify.do") + public String qustnrManageModify(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, QustnrManageVO qustnrManageVO, + BindingResult bindingResult, ModelMap model) throws Exception { + // 0. Spring Security 사용자권한 처리 + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if(!isAuthenticated) { + model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); + return "egovframework/com/uat/uia/EgovLoginUsr"; + } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + + String sLocationUrl = "egovframework/com/uss/olp/qmc/EgovQustnrManageModify"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + + //공통코드 직업유형 조회 + ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); + voComCode.setCodeId("COM034"); + List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode034", listComCode); + + if(sCmd.equals("save")){ + + beanValidator.validate(qustnrManageVO, bindingResult); + if (bindingResult.hasErrors()){ + + List sampleList = egovQustnrManageService.selectQustnrManageDetail(qustnrManageVO); + model.addAttribute("resultList", sampleList); + + //설문템플릿 정보 불러오기 + List listQustnrTmplat = egovQustnrManageService.selectQustnrTmplatManageList(qustnrManageVO); + model.addAttribute("listQustnrTmplat", listQustnrTmplat); + + return sLocationUrl; + } + + //아이디 설정 + qustnrManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrManageService.updateQustnrManage(qustnrManageVO); +// sLocationUrl = "redirect:/uss/olp/qmc/EgovQustnrManageList.do"; + return CommUtil.doCompleteUrl(model, "성공", "수정 되었습니다.", "/_mngr_/qmc/EgovQustnrManageDetail.do"); + + } else { + + List sampleList = egovQustnrManageService.selectQustnrManageDetail(qustnrManageVO); + model.addAttribute("resultList", sampleList); + + QustnrManageVO newQustnrManageVO = egovQustnrManageService.selectQustnrManageDetailModel(qustnrManageVO); + model.addAttribute("qustnrManageVO", newQustnrManageVO); + + //설문템플릿 정보 불러오기 + List listQustnrTmplat = egovQustnrManageService.selectQustnrTmplatManageList(qustnrManageVO); + model.addAttribute("listQustnrTmplat", listQustnrTmplat); + } + + return sLocationUrl; + } + + /** + * 설문관리를 등록한다. + * @param searchVO + * @param commandMap + * @param qustnrManageVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/qmc/EgovQustnrManageRegist" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qmc/EgovQustnrManageRegist.do") + public String qustnrManageRegist(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, @ModelAttribute("qustnrManageVO") QustnrManageVO qustnrManageVO, + BindingResult bindingResult, ModelMap model) throws Exception { + + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + + String sLocationUrl = "egovframework/com/uss/olp/qmc/EgovQustnrManageRegist"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + LOGGER.info("cmd => {}", sCmd); + + //공통코드 직업유형 조회 + ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); + voComCode.setCodeId("COM034"); + List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode034", listComCode); + + if(sCmd.equals("save")){ + + beanValidator.validate(qustnrManageVO, bindingResult); + if (bindingResult.hasErrors()){ + //설문템플릿 정보 불러오기 + List listQustnrTmplat = egovQustnrManageService.selectQustnrTmplatManageList(qustnrManageVO); + model.addAttribute("listQustnrTmplat", listQustnrTmplat); + return sLocationUrl; + } + + //아이디 설정 + qustnrManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrManageService.insertQustnrManage(qustnrManageVO); +// sLocationUrl = "redirect:/_mngr_/qmc/EgovQustnrManageList.do"; + return CommUtil.doCompleteUrl(model, "성공", "저장 되었습니다.", "/_mngr_/qmc/EgovQustnrManageList.do"); + + } else { + + //설문템플릿 정보 불러오기 + List listQustnrTmplat = egovQustnrManageService.selectQustnrTmplatManageList(qustnrManageVO); + model.addAttribute("listQustnrTmplat", listQustnrTmplat); + } + + return sLocationUrl; + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qqm/service/EgovQustnrQestnManageService.java b/src/main/java/egovframework/com/uss/olp/qqm/service/EgovQustnrQestnManageService.java new file mode 100644 index 0000000..8033493 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qqm/service/EgovQustnrQestnManageService.java @@ -0,0 +1,95 @@ +package egovframework.com.uss.olp.qqm.service; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultVO; +/** + * 설문문항을 처리하는 Service Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +public interface EgovQustnrQestnManageService { + + /** + * 설문조사 응답자답변내용결과/기타답변내용결과 통계를 조회한다. + * @param Map - 설문지 정보가 담김 Parameter + * @return Map + * @throws Exception + */ + public List selectQustnrManageStatistics2(Map map) throws Exception; + + /** + * 설문조사 통계를 조회한다. + * @param Map - 설문지 정보가 담김 Parameter + * @return Map + * @throws Exception + */ + public List selectQustnrManageStatistics(Map map) throws Exception; + + /** + * 설문지정보 설문제목을 조회한다. + * @param Map - 설문지 정보가 담김 Parameter + * @return Map + * @throws Exception + */ + public Map selectQustnrManageQestnrSj(Map map) throws Exception; + + /** + * 설문문항 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrQestnManageList(ComDefaultVO searchVO) throws Exception; + + /** + * 설문문항를(을) 상세조회 한다. + * @param qustnrQestnManageVO - 설문문항 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrQestnManageDetail(QustnrQestnManageVO qustnrQestnManageVO) throws Exception; + + /** + * 설문문항를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrQestnManageListCnt(ComDefaultVO searchVO) throws Exception; + + /** + * 설문문항를(을) 등록한다. + * @param qustnrQestnManageVO - 설문문항 정보 담김 VO + * @throws Exception + */ + void insertQustnrQestnManage(QustnrQestnManageVO qustnrQestnManageVO) throws Exception; + + /** + * 설문문항를(을) 수정한다. + * @param qustnrQestnManageVO - 설문문항 정보 담김 VO + * @throws Exception + */ + void updateQustnrQestnManage(QustnrQestnManageVO qustnrQestnManageVO) throws Exception; + + /** + * 설문문항를(을) 삭제한다. + * @param qustnrQestnManageVO - 설문문항 정보 담김 VO + * @throws Exception + */ + void deleteQustnrQestnManage(QustnrQestnManageVO qustnrQestnManageVO) throws Exception; + + +} diff --git a/src/main/java/egovframework/com/uss/olp/qqm/service/QustnrQestnManageVO.java b/src/main/java/egovframework/com/uss/olp/qqm/service/QustnrQestnManageVO.java new file mode 100644 index 0000000..3d3c75a --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qqm/service/QustnrQestnManageVO.java @@ -0,0 +1,272 @@ +package egovframework.com.uss.olp.qqm.service; + +import java.io.Serializable; +/** + * 설문문항 VO Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +public class QustnrQestnManageVO implements Serializable { + + private static final long serialVersionUID = -1010670861596333788L; + + /** 설문제목 */ + private String qestnrSj = ""; + + /** 설문문항 ID */ + private String qestnrQesitmId = ""; + + /** 설문지 ID */ + private String qestnrId = ""; + + /** 질문순번 */ + private String qestnSn = ""; + + /** 질문유형코드 */ + private String qestnTyCode = ""; + + /** 질문내용 */ + private String qestnCn = ""; + + /** 초대선택건수 */ + private String mxmmChoiseCo = ""; + + /** 템플릿 ID */ + private String qestnrTmplatId = ""; + + /** 최초등록자아이디 */ + private String frstRegisterPnttm = ""; + + /** 최초등록시점 */ + private String frstRegisterId = ""; + + /** 최종수정시점 */ + private String lastUpdusrPnttm = ""; + + /** 최종수정시점아이디 */ + private String lastUpdusrId = ""; + + /** 검색모드설정 */ + private String searchMode = ""; + + /** + * qestnrSj attribute 를 리턴한다. + * @return the String + */ + public String getQestnrSj() { + return qestnrSj; + } + + /** + * qestnrSj attribute 값을 설정한다. + * @return qestnrSj String + */ + public void setQestnrSj(String qestnrSj) { + this.qestnrSj = qestnrSj; + } + + /** + * qestnrQesitmId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrQesitmId() { + return qestnrQesitmId; + } + + /** + * qestnrQesitmId attribute 값을 설정한다. + * @return qestnrQesitmId String + */ + public void setQestnrQesitmId(String qestnrQesitmId) { + this.qestnrQesitmId = qestnrQesitmId; + } + + /** + * qestnrId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrId() { + return qestnrId; + } + + /** + * qestnrId attribute 값을 설정한다. + * @return qestnrId String + */ + public void setQestnrId(String qestnrId) { + this.qestnrId = qestnrId; + } + + /** + * qestnSn attribute 를 리턴한다. + * @return the String + */ + public String getQestnSn() { + return qestnSn; + } + + /** + * qestnSn attribute 값을 설정한다. + * @return qestnSn String + */ + public void setQestnSn(String qestnSn) { + this.qestnSn = qestnSn; + } + + /** + * qestnTyCode attribute 를 리턴한다. + * @return the String + */ + public String getQestnTyCode() { + return qestnTyCode; + } + + /** + * qestnTyCode attribute 값을 설정한다. + * @return qestnTyCode String + */ + public void setQestnTyCode(String qestnTyCode) { + this.qestnTyCode = qestnTyCode; + } + + /** + * qestnCn attribute 를 리턴한다. + * @return the String + */ + public String getQestnCn() { + return qestnCn; + } + + /** + * qestnCn attribute 값을 설정한다. + * @return qestnCn String + */ + public void setQestnCn(String qestnCn) { + this.qestnCn = qestnCn; + } + + /** + * mxmmChoiseCo attribute 를 리턴한다. + * @return the String + */ + public String getMxmmChoiseCo() { + return mxmmChoiseCo; + } + + /** + * mxmmChoiseCo attribute 값을 설정한다. + * @return mxmmChoiseCo String + */ + public void setMxmmChoiseCo(String mxmmChoiseCo) { + this.mxmmChoiseCo = mxmmChoiseCo; + } + + /** + * qestnrTmplatId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrTmplatId() { + return qestnrTmplatId; + } + + /** + * qestnrTmplatId attribute 값을 설정한다. + * @return qestnrTmplatId String + */ + public void setQestnrTmplatId(String qestnrTmplatId) { + this.qestnrTmplatId = qestnrTmplatId; + } + + /** + * frstRegisterPnttm attribute 를 리턴한다. + * @return the String + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * frstRegisterPnttm attribute 값을 설정한다. + * @return frstRegisterPnttm String + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } + + /** + * frstRegisterId attribute 를 리턴한다. + * @return the String + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * @return frstRegisterId String + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * lastUpdusrPnttm attribute 를 리턴한다. + * @return the String + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * lastUpdusrPnttm attribute 값을 설정한다. + * @return lastUpdusrPnttm String + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * lastUpdusrId attribute 를 리턴한다. + * @return the String + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * @return lastUpdusrId String + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + /** + * searchMode attribute 를 리턴한다. + * @return the String + */ + public String getSearchMode() { + return searchMode; + } + + /** + * searchMode attribute 값을 설정한다. + * @return searchMode String + */ + public void setSearchMode(String searchMode) { + this.searchMode = searchMode; + } + + +} diff --git a/src/main/java/egovframework/com/uss/olp/qqm/service/impl/EgovQustnrQestnManageServiceImpl.java b/src/main/java/egovframework/com/uss/olp/qqm/service/impl/EgovQustnrQestnManageServiceImpl.java new file mode 100644 index 0000000..aa2f655 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qqm/service/impl/EgovQustnrQestnManageServiceImpl.java @@ -0,0 +1,142 @@ +package egovframework.com.uss.olp.qqm.service.impl; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.uss.olp.qqm.service.EgovQustnrQestnManageService; +import egovframework.com.uss.olp.qqm.service.QustnrQestnManageVO; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; +/** + * 설문문항을 처리하는 ServiceImpl Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +@Service("egovQustnrQestnManageService") +public class EgovQustnrQestnManageServiceImpl extends EgovAbstractServiceImpl implements EgovQustnrQestnManageService{ + + //final private Log log = LogFactory.getLog(this.getClass()); + + @Resource(name="qustnrQestnManageDao") + private QustnrQestnManageDao dao; + + @Resource(name="egovQustnrQestnManageIdGnrService") + private EgovIdGnrService idgenService; + + + /** + * 설문조사 응답자답변내용결과/기타답변내용결과 통계를 조회한다. + * @param Map - 설문지 정보가 담김 Parameter + * @return Map + * @throws Exception + */ + @Override + public List selectQustnrManageStatistics2(Map map) throws Exception{ + return dao.selectQustnrManageStatistics2(map); + } + + /** + * 설문조사 통계를 조회한다. + * @param Map - 설문지 정보가 담김 Parameter + * @return Map + * @throws Exception + */ + @Override + public List selectQustnrManageStatistics(Map map) throws Exception{ + return dao.selectQustnrManageStatistics(map); + } + /** + * 설문지정보 설문제목을 조회한다. + * @param Map - 설문지 정보가 담김 Parameter + * @return Map + * @throws Exception + */ + @Override + public Map selectQustnrManageQestnrSj(Map map) throws Exception{ + return dao.selectQustnrManageQestnrSj(map); + } + + /** + * 설문문항 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrQestnManageList(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrQestnManageList(searchVO); + } + + /** + * 설문문항를(을) 상세조회 한다. + * @param QustnrQestnManage - 회정정보가 담김 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrQestnManageDetail(QustnrQestnManageVO qustnrQestnManageVO) throws Exception{ + return dao.selectQustnrQestnManageDetail(qustnrQestnManageVO); + } + + /** + * 설문문항를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + @Override + public int selectQustnrQestnManageListCnt(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrQestnManageListCnt(searchVO); + } + + /** + * 설문문항를(을) 등록한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void insertQustnrQestnManage(QustnrQestnManageVO qustnrQestnManageVO) throws Exception { + String sMakeId = idgenService.getNextStringId(); + + qustnrQestnManageVO.setQestnrQesitmId(sMakeId); + + dao.insertQustnrQestnManage(qustnrQestnManageVO); + } + + /** + * 설문문항를(을) 수정한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void updateQustnrQestnManage(QustnrQestnManageVO qustnrQestnManageVO) throws Exception{ + dao.updateQustnrQestnManage(qustnrQestnManageVO); + } + + /** + * 설문문항를(을) 삭제한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void deleteQustnrQestnManage(QustnrQestnManageVO qustnrQestnManageVO) throws Exception{ + dao.deleteQustnrQestnManage(qustnrQestnManageVO); + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qqm/service/impl/QustnrQestnManageDao.java b/src/main/java/egovframework/com/uss/olp/qqm/service/impl/QustnrQestnManageDao.java new file mode 100644 index 0000000..f4e2c7d --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qqm/service/impl/QustnrQestnManageDao.java @@ -0,0 +1,123 @@ +package egovframework.com.uss.olp.qqm.service.impl; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; +import egovframework.com.uss.olp.qqm.service.QustnrQestnManageVO; + +import org.springframework.stereotype.Repository; +/** + * 설문문항을 처리하는 Dao Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +@Repository("qustnrQestnManageDao") +public class QustnrQestnManageDao extends EgovComAbstractDAO { + + /** + * 설문조사 응답자답변내용결과/기타답변내용결과 통계를 조회한다. + * @param Map - 설문지 정보가 담김 Parameter + * @return Map + * @throws Exception + */ + public List selectQustnrManageStatistics2(Map map) throws Exception{ + return list("QustnrQestnManage.selectQustnrManageStatistics2", map); + } + + /** + * 설문조사 통계를 조회한다. + * @param Map - 설문지 정보가 담김 Parameter + * @return Map + * @throws Exception + */ + public List selectQustnrManageStatistics(Map map) throws Exception{ + return list("QustnrQestnManage.selectQustnrManageStatistics", map); + } + + /** + * 설문지정보 설문제목을 조회한다. + * @param Map - 설문지 정보가 담김 Parameter + * @return Map + * @throws Exception + */ + public Map selectQustnrManageQestnrSj(Map map) throws Exception{ + return (Map)select("QustnrQestnManage.selectQustnrManageQestnrSj", map); + } + + /** + * 설문문항 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrQestnManageList(ComDefaultVO searchVO) throws Exception{ + return list("QustnrQestnManage.selectQustnrQestnManage", searchVO); + } + + /** + * 설문문항를(을) 상세조회 한다. + * @param qustnrQestnManageVO - 설문문항 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrQestnManageDetail(QustnrQestnManageVO qustnrQestnManageVO) throws Exception{ + return list("QustnrQestnManage.selectQustnrQestnManageDetail", qustnrQestnManageVO); + } + + /** + * 설문문항를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrQestnManageListCnt(ComDefaultVO searchVO) throws Exception{ + return (Integer)select("QustnrQestnManage.selectQustnrQestnManageCnt", searchVO); + } + + /** + * 설문문항를(을) 등록한다. + * @param qqustnrQestnManageVO - 설문문항 정보 담김 VO + * @throws Exception + */ + public void insertQustnrQestnManage(QustnrQestnManageVO qustnrQestnManageVO) throws Exception{ + insert("QustnrQestnManage.insertQustnrQestnManage", qustnrQestnManageVO); + } + + /** + * 설문문항를(을) 수정한다. + * @param qustnrQestnManageVO - 설문문항 정보 담김 VO + * @throws Exception + */ + public void updateQustnrQestnManage(QustnrQestnManageVO qustnrQestnManageVO) throws Exception{ + insert("QustnrQestnManage.updateQustnrQestnManage", qustnrQestnManageVO); + } + + /** + * 설문문항를(을) 삭제한다. + * @param qustnrQestnManageVO - 설문문항 정보 담김 VO + * @throws Exception + */ + public void deleteQustnrQestnManage(QustnrQestnManageVO qustnrQestnManageVO) throws Exception{ + + //설문조사(설문결과) 삭제 + delete("QustnrQestnManage.deleteQustnrRespondInfo", qustnrQestnManageVO); + //설문항목 삭제 + delete("QustnrQestnManage.deleteQustnrItemManage", qustnrQestnManageVO); + + //설문문항 + delete("QustnrQestnManage.deleteQustnrQestnManage", qustnrQestnManageVO); + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qqm/web/EgovQustnrQestnManageController.java b/src/main/java/egovframework/com/uss/olp/qqm/web/EgovQustnrQestnManageController.java new file mode 100644 index 0000000..0d41bc8 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qqm/web/EgovQustnrQestnManageController.java @@ -0,0 +1,438 @@ +package egovframework.com.uss.olp.qqm.web; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.EgovMessageSource; +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.annotation.IncludedInfo; +import egovframework.com.cmm.service.EgovCmmUseService; +import egovframework.com.cmm.util.EgovUserDetailsHelper; +import egovframework.com.sym.bat.service.BatchOpert; +import egovframework.com.uss.olp.qqm.service.EgovQustnrQestnManageService; +import egovframework.com.uss.olp.qqm.service.QustnrQestnManageVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springmodules.validation.commons.DefaultBeanValidator; +/** + * 설문문항을 처리하는 Controller Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *   2011.8.26	정진오			IncludedInfo annotation 추가
    + *
    + * 
    + */ + +@Controller +public class EgovQustnrQestnManageController { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovQustnrQestnManageController.class); + + @Autowired + private DefaultBeanValidator beanValidator; + + /** EgovMessageSource */ + @Resource(name="egovMessageSource") + EgovMessageSource egovMessageSource; + + @Resource(name = "egovQustnrQestnManageService") + private EgovQustnrQestnManageService egovQustnrQestnManageService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + @Resource(name="EgovCmmUseService") + private EgovCmmUseService cmmUseService; + + /** + * 설문항목 통계를 조회한다. + * @param searchVO + * @param qustnrQestnManageVO + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageStatistics" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qqm/EgovQustnrQestnManageStatistics.do") + public String egovQustnrQestnManageStatistics(@ModelAttribute("searchVO") ComDefaultVO searchVO, QustnrQestnManageVO qustnrQestnManageVO, + @RequestParam Map commandMap, ModelMap model) throws Exception { + + String sLocationUrl = "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageStatistics"; + + List sampleList = egovQustnrQestnManageService.selectQustnrQestnManageDetail(qustnrQestnManageVO); + model.addAttribute("resultList", sampleList); + + // 객관식설문통계 + HashMap mapParam = new HashMap(); + mapParam.put("qestnrQesitmId", qustnrQestnManageVO.getQestnrQesitmId()); + List statisticsList = egovQustnrQestnManageService.selectQustnrManageStatistics(mapParam); + model.addAttribute("statisticsList", statisticsList); + + // 주관식설문통계 + List statisticsList2 = egovQustnrQestnManageService.selectQustnrManageStatistics2(mapParam); + model.addAttribute("statisticsList2", statisticsList2); + + return sLocationUrl; + } + + /** + * 설문문항 팝업 프레임을 조회한다. + * @param searchVO + * @param commandMap + * @param qustnrManageVO + * @param model + * @return "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageListPopupFrame" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qqm/EgovQustnrQestnManageListPopupFrame.do") + public String egovQustnrQestnManageListPopupFrame(@ModelAttribute("searchVO") ComDefaultVO searchVO, HttpServletRequest request, ModelMap model) throws Exception { + + String searchKeyword0 = CommUtil.isNull(request.getParameter("searchKeyword0"), ""); + model.addAttribute("searchKeyword0", searchKeyword0); + + return "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageListPopupFrame"; + } + + /** + * 설문문항 팝업 목록을 조회한다. + * @param searchVO + * @param qustnrQestnManageVO + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageListPopup" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qqm/EgovQustnrQestnManageListPopup.do") + public String egovQustnrQestnManageListPopup(@ModelAttribute("searchVO") ComDefaultVO searchVO, @ModelAttribute("qustnrQestnManageVO") QustnrQestnManageVO qustnrQestnManageVO, + @RequestParam Map commandMap, ModelMap model) throws Exception { + + String sSearchMode = commandMap.get("searchMode") == null ? "" : (String)commandMap.get("searchMode"); + + //설문지정보에서 넘어오면 자동검색 설정 + if(sSearchMode.equals("Y")){ + searchVO.setSearchCondition("QESTNR_ID"); + searchVO.setSearchKeyword(qustnrQestnManageVO.getQestnrId()); + } + + /** EgovPropertyService.sample */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("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()); + + List resultList = egovQustnrQestnManageService.selectQustnrQestnManageList(searchVO); + model.addAttribute("resultList", resultList); + + int totCnt = egovQustnrQestnManageService.selectQustnrQestnManageListCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageListPopup"; + } + + /** + * 설문문항 목록을 조회한다. + * @param searchVO + * @param qustnrQestnManageVO + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageList" + * @throws Exception + */ + @SuppressWarnings("unused") + @IncludedInfo(name="질문관리", order = 630 ,gid = 50) + @RequestMapping(value="/_mngr_/qqm/EgovQustnrQestnManageList.do") + public String egovQustnrQestnManageList(@ModelAttribute("searchVO") ComDefaultVO searchVO, @ModelAttribute("qustnrQestnManageVO") QustnrQestnManageVO qustnrQestnManageVO, + @RequestParam Map commandMap, ModelMap model) throws Exception { + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + String sSearchMode = commandMap.get("searchMode") == null ? "" : (String)commandMap.get("searchMode"); + + if(sCmd.equals("del")){ + egovQustnrQestnManageService.deleteQustnrQestnManage(qustnrQestnManageVO); + } + + //설문지정보에서 넘어오면 자동검색 설정 + if(sSearchMode.equals("Y")){ +// searchVO.setSearchCondition("QESTNR_ID"); + searchVO.setSearchKeyword0(qustnrQestnManageVO.getQestnrId()); + } + + /** EgovPropertyService.sample */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("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()); + + List sampleList = egovQustnrQestnManageService.selectQustnrQestnManageList(searchVO); + model.addAttribute("resultList", sampleList); + + int totCnt = egovQustnrQestnManageService.selectQustnrQestnManageListCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageList"; + } + + /** + * 설문문항 목록을 상세조회 조회한다. + * @param searchVO + * @param qustnrQestnManageVO + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageDetail" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qqm/EgovQustnrQestnManageDetail.do") + public String egovQustnrQestnManageDetail(@ModelAttribute("searchVO") ComDefaultVO searchVO, @ModelAttribute("qustnrQestnManageVO") QustnrQestnManageVO qustnrQestnManageVO, + @RequestParam Map commandMap, ModelMap model) throws Exception { + + String sLocationUrl = "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageDetail"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + + if(sCmd.equals("del")){ + + egovQustnrQestnManageService.deleteQustnrQestnManage(qustnrQestnManageVO); + /** 목록으로갈때 검색조건 유지 */ +// sLocationUrl = "redirect:/_mngr_/qqm/EgovQustnrQestnManageList.do?"; +// sLocationUrl = sLocationUrl + "searchMode=" + qustnrQestnManageVO.getSearchMode(); +// sLocationUrl = sLocationUrl + "&qestnrId=" + qustnrQestnManageVO.getQestnrId(); +// sLocationUrl = sLocationUrl + "&qestnrTmplatId=" +qustnrQestnManageVO.getQestnrTmplatId(); + return CommUtil.doCompleteUrl(model, "성공", "삭제 되었습니다.", "/_mngr_/qqm/EgovQustnrQestnManageList.do"); + + } else { + + //공통코드 질문유형 조회 + ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); + voComCode.setCodeId("COM018"); + List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("cmmCode018", listComCode); + + List sampleList = egovQustnrQestnManageService.selectQustnrQestnManageDetail(qustnrQestnManageVO); + model.addAttribute("resultList", sampleList); + } + + return sLocationUrl; + } + + /** + * 설문문항를 수정한다. + * @param searchVO + * @param commandMap + * @param qustnrQestnManageVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageModify" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qqm/EgovQustnrQestnManageModify.do") + public String qustnrQestnManageModify(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + @ModelAttribute("qustnrQestnManageVO") QustnrQestnManageVO qustnrQestnManageVO, BindingResult bindingResult, ModelMap model) throws Exception { + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + + String sLocationUrl = "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageModify"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + + //공통코드 질문유형 조회 + ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); + voComCode.setCodeId("COM018"); + List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("cmmCode018", listComCode); + + if(sCmd.equals("save")){ + //서버 validate 체크 + beanValidator.validate(qustnrQestnManageVO, bindingResult); + if (bindingResult.hasErrors()){ + //설문제목가져오기 + String sQestnrId = commandMap.get("qestnrId") == null ? "" : (String)commandMap.get("qestnrId"); + String sQestnrTmplatId = commandMap.get("qestnrTmplatId") == null ? "" : (String)commandMap.get("qestnrTmplatId"); + + LOGGER.info("sQestnrId => {}", sQestnrId); + LOGGER.info("sQestnrTmplatId => {}", sQestnrTmplatId); + if(!sQestnrId.equals("") && !sQestnrTmplatId.equals("")){ + + Map mapQustnrManage = new HashMap(); + mapQustnrManage.put("qestnrId", sQestnrId); + mapQustnrManage.put("qestnrTmplatId", sQestnrTmplatId); + + model.addAttribute("qestnrInfo", egovQustnrQestnManageService.selectQustnrManageQestnrSj(mapQustnrManage)); + } + + List resultList = egovQustnrQestnManageService.selectQustnrQestnManageDetail(qustnrQestnManageVO); + model.addAttribute("resultList", resultList); + return "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageModify"; + } + + //아이디 설정 + qustnrQestnManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrQestnManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrQestnManageService.updateQustnrQestnManage(qustnrQestnManageVO); + /** 목록으로갈때 검색조건 유지 */ +// sLocationUrl = "redirect:/_mngr_/qqm/EgovQustnrQestnManageList.do?"; +// sLocationUrl = sLocationUrl + "searchMode=" + qustnrQestnManageVO.getSearchMode(); +// sLocationUrl = sLocationUrl + "&qestnrId=" + qustnrQestnManageVO.getQestnrId(); +// sLocationUrl = sLocationUrl + "&qestnrTmplatId=" +qustnrQestnManageVO.getQestnrTmplatId(); + return CommUtil.doCompleteUrl(model, "성공", "수정 되었습니다.", "/_mngr_/qqm/EgovQustnrQestnManageDetail.do"); + + } else { + + List resultList = egovQustnrQestnManageService.selectQustnrQestnManageDetail(qustnrQestnManageVO); + model.addAttribute("resultList", resultList); + } + + return sLocationUrl; + } + + /** + * 설문문항를 등록한다. + * @param searchVO + * @param commandMap + * @param qustnrQestnManageVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageRegist" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qqm/EgovQustnrQestnManageRegist.do") + public String qustnrQestnManageRegist(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + @ModelAttribute("qustnrQestnManageVO") QustnrQestnManageVO qustnrQestnManageVO, BindingResult bindingResult, ModelMap model) throws Exception { + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + + String sLocationUrl = "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageRegist"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + LOGGER.info("cmd => {}", sCmd); + + //공통코드 질문유형 조회 + ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); + voComCode.setCodeId("COM018"); + List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("cmmCode018", listComCode); + + if(sCmd.equals("save")){ + + //서버 validate 체크 + beanValidator.validate(qustnrQestnManageVO, bindingResult); + if (bindingResult.hasErrors()){ + //설문제목가져오기 + String sQestnrId = commandMap.get("qestnrId") == null ? "" : (String)commandMap.get("qestnrId"); + String sQestnrTmplatId = commandMap.get("qestnrTmplatId") == null ? "" : (String)commandMap.get("qestnrTmplatId"); + + LOGGER.info("sQestnrId => {}", sQestnrId); + LOGGER.info("sQestnrTmplatId => {}", sQestnrTmplatId); + if(!sQestnrId.equals("") && !sQestnrTmplatId.equals("")){ + + Map mapQustnrManage = new HashMap(); + mapQustnrManage.put("qestnrId", sQestnrId); + mapQustnrManage.put("qestnrTmplatId", sQestnrTmplatId); + + model.addAttribute("qestnrInfo", egovQustnrQestnManageService.selectQustnrManageQestnrSj(mapQustnrManage)); + } + + return "egovframework/com/uss/olp/qqm/EgovQustnrQestnManageRegist"; + } + + //아이디 설정 + qustnrQestnManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrQestnManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + /** 목록으로갈때 검색조건 유지 */ + egovQustnrQestnManageService.insertQustnrQestnManage(qustnrQestnManageVO); +// sLocationUrl = "redirect:/_mngr_/qqm/EgovQustnrQestnManageList.do?"; +// sLocationUrl = sLocationUrl + "searchMode=" + qustnrQestnManageVO.getSearchMode(); +// sLocationUrl = sLocationUrl + "&qestnrId=" + qustnrQestnManageVO.getQestnrId(); +// sLocationUrl = sLocationUrl + "&qestnrTmplatId=" +qustnrQestnManageVO.getQestnrTmplatId(); + return CommUtil.doCompleteUrl(model, "성공", "저장 되었습니다.", "/_mngr_/qqm/EgovQustnrQestnManageList.do"); + + } else { + + //설문제목가져오기 + String sQestnrId = commandMap.get("qestnrId") == null ? "" : (String)commandMap.get("qestnrId"); + String sQestnrTmplatId = commandMap.get("qestnrTmplatId") == null ? "" : (String)commandMap.get("qestnrTmplatId"); + + LOGGER.info("sQestnrId => {}", sQestnrId); + LOGGER.info("sQestnrTmplatId => {}", sQestnrTmplatId); + + if(!sQestnrId.equals("") && !sQestnrTmplatId.equals("")){ + + Map mapQustnrManage = new HashMap(); + mapQustnrManage.put("qestnrId", sQestnrId); + mapQustnrManage.put("qestnrTmplatId", sQestnrTmplatId); + + model.addAttribute("qestnrInfo", egovQustnrQestnManageService.selectQustnrManageQestnrSj(mapQustnrManage)); + } + } + + return sLocationUrl; + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qri/service/EgovQustnrRespondInfoService.java b/src/main/java/egovframework/com/uss/olp/qri/service/EgovQustnrRespondInfoService.java new file mode 100644 index 0000000..829c615 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qri/service/EgovQustnrRespondInfoService.java @@ -0,0 +1,193 @@ +package egovframework.com.uss.olp.qri.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.web.servlet.ModelAndView; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.itgcms.module.link.service.LinkVO; +/** + * 설문조사 Service Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +public interface EgovQustnrRespondInfoService { + + + + /** + * 설문템플릿을 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrTmplatManage(Map map) throws Exception; + + /** + * 객관식 통계를 조회 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageStatistics1(Map map) throws Exception; + /** + * 주관식 통계를 조회 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageStatistics2(Map map) throws Exception; + /** + * 회원정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public Map selectQustnrRespondInfoManageEmplyrinfo(Map map) throws Exception; + + /** + * 설문정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageComtnqestnrinfo(Map map) throws Exception; + /** + * 설문정보(web)를 조회한다. + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageComtnqestnrinfoWeb() throws Exception; + /** + * 문항정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageComtnqustnrqesitm(Map map) throws Exception; + /** + * 기타의견이 있는 문항정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageComtnqustnrqesitmEtc(Map map) throws Exception; + /** + * 항목정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageComtnqustnriem(Map map) throws Exception; + + /** + * 기타의견이 있는 항목정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageComtnqustnriemEtc(Map map) throws Exception; + + /** + * 항목결과(기타 답변내용)를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoComtnqustnrrspnsresultEtc(Map map) throws Exception; + + /** + * 설문조사(설문등록)를(을) 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageList(ComDefaultVO searchVO) throws Exception; + + /** + * 설문조사(설문등록)를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return + * @throws Exception + */ + public int selectQustnrRespondInfoManageListCnt(ComDefaultVO searchVO) throws Exception; + + /** + * 응답자결과(설문조사) 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoList(ComDefaultVO searchVO) throws Exception; + + /** + * 응답자결과(설문조사)를(을) 상세조회 한다. + * @param qustnrRespondInfoVO - 응답자결과(설문조사) 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoDetail(QustnrRespondInfoVO qustnrRespondInfoVO) throws Exception; + + /** + * 응답자결과(설문조사)를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrRespondInfoListCnt(ComDefaultVO searchVO) throws Exception; + + /** + * 응답자결과(설문조사)를(을) 등록한다. + * @param qustnrRespondInfoVO - 응답자결과(설문조사) 정보 담김 VO + * @throws Exception + */ + void insertQustnrRespondInfo(QustnrRespondInfoVO qustnrRespondInfoVO) throws Exception; + + /** + * 응답자결과(설문조사)를(을) 수정한다. + * @param qustnrRespondInfoVO - 응답자결과(설문조사) 정보 담김 VO + * @throws Exception + */ + void updateQustnrRespondInfo(QustnrRespondInfoVO qustnrRespondInfoVO) throws Exception; + + /** + * 응답자결과(설문조사)를(을) 삭제한다. + * @param qustnrRespondInfoVO - 응답자결과(설문조사) 정보 담김 VO + * @throws Exception + */ + void deleteQustnrRespondInfo(QustnrRespondInfoVO qustnrRespondInfoVO) throws Exception; + + /** + * 사용자 설문조사(설문등록)를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectWebPollRegistPopup(ComDefaultVO searchVO) throws Exception; + + /** + * 설문조사 전체 결과(통계)를 엑셀다운로드한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + + + ModelAndView mngrQustnrRespondInfoResultExcelDown(Map map, HttpServletRequest request) throws Exception; +} diff --git a/src/main/java/egovframework/com/uss/olp/qri/service/QustnrRespondInfoVO.java b/src/main/java/egovframework/com/uss/olp/qri/service/QustnrRespondInfoVO.java new file mode 100644 index 0000000..b8a76a8 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qri/service/QustnrRespondInfoVO.java @@ -0,0 +1,264 @@ +package egovframework.com.uss.olp.qri.service; + +import java.io.Serializable; +/** + * 설문조사 VO Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +public class QustnrRespondInfoVO implements Serializable { + + private static final long serialVersionUID = 129726904408750568L; + + /** 설문응답ID */ + private String qestnrQesrspnsId = ""; + + /** 설문문항ID */ + private String qestnrQesitmId = ""; + + /** 설문ID */ + private String qestnrId = ""; + + /** 설문템플릿ID */ + private String qestnrTmplatId = ""; + + /** 설문항목ID */ + private String qustnrIemId = ""; + + /** 응답자답변내용 */ + private String respondAnswerCn = ""; + + /** 응답자명 */ + private String respondNm = ""; + + /** 기타답변내용 */ + private String etcAnswerCn = ""; + + /** 기타답변여부 갯수 */ + private String etcAnswerAtCnt = ""; + + /** 최초등록시점 */ + private String frstRegisterPnttm = ""; + + /** 최등등록시점ID */ + private String frstRegisterId = ""; + + /** 최종수정시점 */ + private String lastUpdusrPnttm = ""; + + /** 최종수정시점ID */ + private String lastUpdusrId = ""; + + /** + * qestnrQesrspnsId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrQesrspnsId() { + return qestnrQesrspnsId; + } + + /** + * qestnrQesrspnsId attribute 값을 설정한다. + * @return qestnrQesrspnsId String + */ + public void setQestnrQesrspnsId(String qestnrQesrspnsId) { + this.qestnrQesrspnsId = qestnrQesrspnsId; + } + + /** + * qestnrQesitmId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrQesitmId() { + return qestnrQesitmId; + } + + /** + * qestnrQesitmId attribute 값을 설정한다. + * @return qestnrQesitmId String + */ + public void setQestnrQesitmId(String qestnrQesitmId) { + this.qestnrQesitmId = qestnrQesitmId; + } + + /** + * qestnrId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrId() { + return qestnrId; + } + + /** + * qestnrId attribute 값을 설정한다. + * @return qestnrId String + */ + public void setQestnrId(String qestnrId) { + this.qestnrId = qestnrId; + } + + /** + * qestnrTmplatId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrTmplatId() { + return qestnrTmplatId; + } + + /** + * qestnrTmplatId attribute 값을 설정한다. + * @return qestnrTmplatId String + */ + public void setQestnrTmplatId(String qestnrTmplatId) { + this.qestnrTmplatId = qestnrTmplatId; + } + + /** + * qustnrIemId attribute 를 리턴한다. + * @return the String + */ + public String getQustnrIemId() { + return qustnrIemId; + } + + /** + * qustnrIemId attribute 값을 설정한다. + * @return qustnrIemId String + */ + public void setQustnrIemId(String qustnrIemId) { + this.qustnrIemId = qustnrIemId; + } + + /** + * respondAnswerCn attribute 를 리턴한다. + * @return the String + */ + public String getRespondAnswerCn() { + return respondAnswerCn; + } + + /** + * respondAnswerCn attribute 값을 설정한다. + * @return respondAnswerCn String + */ + public void setRespondAnswerCn(String respondAnswerCn) { + this.respondAnswerCn = respondAnswerCn; + } + + /** + * respondNm attribute 를 리턴한다. + * @return the String + */ + public String getRespondNm() { + return respondNm; + } + + /** + * respondNm attribute 값을 설정한다. + * @return respondNm String + */ + public void setRespondNm(String respondNm) { + this.respondNm = respondNm; + } + + /** + * etcAnswerCn attribute 를 리턴한다. + * @return the String + */ + public String getEtcAnswerCn() { + return etcAnswerCn; + } + + /** + * etcAnswerCn attribute 값을 설정한다. + * @return etcAnswerCn String + */ + public void setEtcAnswerCn(String etcAnswerCn) { + this.etcAnswerCn = etcAnswerCn; + } + + public String getEtcAnswerAtCnt() { + return etcAnswerAtCnt; + } + + public void setEtcAnswerAtCnt(String etcAnswerAtCnt) { + this.etcAnswerAtCnt = etcAnswerAtCnt; + } + + /** + * frstRegisterPnttm attribute 를 리턴한다. + * @return the String + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * frstRegisterPnttm attribute 값을 설정한다. + * @return frstRegisterPnttm String + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } + + /** + * frstRegisterId attribute 를 리턴한다. + * @return the String + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * @return frstRegisterId String + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * lastUpdusrPnttm attribute 를 리턴한다. + * @return the String + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * lastUpdusrPnttm attribute 값을 설정한다. + * @return lastUpdusrPnttm String + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * lastUpdusrId attribute 를 리턴한다. + * @return the String + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * @return lastUpdusrId String + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + +} diff --git a/src/main/java/egovframework/com/uss/olp/qri/service/impl/EgovQustnrRespondInfoServiceImpl.java b/src/main/java/egovframework/com/uss/olp/qri/service/impl/EgovQustnrRespondInfoServiceImpl.java new file mode 100644 index 0000000..0d10c2d --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qri/service/impl/EgovQustnrRespondInfoServiceImpl.java @@ -0,0 +1,309 @@ +package egovframework.com.uss.olp.qri.service.impl; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.uss.olp.qri.service.EgovQustnrRespondInfoService; +import egovframework.com.uss.olp.qri.service.QustnrRespondInfoVO; +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.itgcms.util.ExcelDownloadView; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Service; +import org.springframework.web.servlet.ModelAndView; +/** + * 설문조사 ServiceImpl Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +@Service("egovQustnrRespondInfoService") +public class EgovQustnrRespondInfoServiceImpl extends EgovAbstractServiceImpl implements EgovQustnrRespondInfoService{ + + //final private Log log = LogFactory.getLog(this.getClass()); + + @Resource(name="qustnrRespondInfoDao") + private QustnrRespondInfoDao dao; + + @Resource(name="qustnrRespondInfoIdGnrService") + private EgovIdGnrService idgenService; + + + /** + * 설문템플릿을 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + @Override + public List selectQustnrTmplatManage(Map map) throws Exception{ + return dao.selectQustnrTmplatManage(map); + } + /** + * 객관식 통계를 조회 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondInfoManageStatistics1(Map map) throws Exception{ + return dao.selectQustnrRespondInfoManageStatistics1(map); + } + /** + * 주관식 통계를 조회 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondInfoManageStatistics2(Map map) throws Exception{ + return dao.selectQustnrRespondInfoManageStatistics2(map); + } + + /** + * 회원정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + @Override + public Map selectQustnrRespondInfoManageEmplyrinfo(Map map) throws Exception{ + return dao.selectQustnrRespondInfoManageEmplyrinfo(map); + } + + /** + * 설문정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondInfoManageComtnqestnrinfo(Map map) throws Exception{ + return dao.selectQustnrRespondInfoManageComtnqestnrinfo(map); + } + /** + * 설문정보(web)를 조회한다. + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondInfoManageComtnqestnrinfoWeb() throws Exception{ + return dao.selectQustnrRespondInfoManageComtnqestnrinfoWeb(); + } + /** + * 문항정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondInfoManageComtnqustnrqesitm(Map map) throws Exception{ + return dao.selectQustnrRespondInfoManageComtnqustnrqesitm(map); + } + /** + * 기타의견이 있는 문항정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondInfoManageComtnqustnrqesitmEtc(Map map) throws Exception{ + return dao.selectQustnrRespondInfoManageComtnqustnrqesitmEtc(map); + } + /** + * 항목정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondInfoManageComtnqustnriem(Map map) throws Exception{ + return dao.selectQustnrRespondInfoManageComtnqustnriem(map); + } + + /** + * 기타의견이 있는 항목정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondInfoManageComtnqustnriemEtc(Map map) throws Exception{ + return dao.selectQustnrRespondInfoManageComtnqustnriemEtc(map); + } + + /** + * 항목결과(기타 답변내용)를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondInfoComtnqustnrrspnsresultEtc(Map map) throws Exception{ + return dao.selectQustnrRespondInfoComtnqustnrrspnsresultEtc(map); + } + + /** + * 설문조사(설문등록)를(을) 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondInfoManageList(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrRespondInfoManageList(searchVO); + } + + /** + * 설문조사(설문등록)를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return + * @throws Exception + */ + @Override + public int selectQustnrRespondInfoManageListCnt(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrRespondInfoManageListCnt(searchVO); + } + + /** + * 응답자결과(설문조사) 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondInfoList(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrRespondInfoList(searchVO); + } + + /** + * 응답자결과(설문조사)를(을) 상세조회 한다. + * @param QustnrRespondInfo - 회정정보가 담김 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondInfoDetail(QustnrRespondInfoVO qustnrRespondInfoVO) throws Exception{ + return dao.selectQustnrRespondInfoDetail(qustnrRespondInfoVO); + } + + /** + * 응답자결과(설문조사)를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + @Override + public int selectQustnrRespondInfoListCnt(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrRespondInfoListCnt(searchVO); + } + + /** + * 응답자결과(설문조사)를(을) 등록한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void insertQustnrRespondInfo(QustnrRespondInfoVO qustnrRespondInfoVO) throws Exception { + String sMakeId = idgenService.getNextStringId(); + + qustnrRespondInfoVO.setQestnrQesrspnsId(sMakeId); + + dao.insertQustnrRespondInfo(qustnrRespondInfoVO); + } + + /** + * 응답자결과(설문조사)를(을) 수정한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void updateQustnrRespondInfo(QustnrRespondInfoVO qustnrRespondInfoVO) throws Exception{ + dao.updateQustnrRespondInfo(qustnrRespondInfoVO); + } + + /** + * 응답자결과(설문조사)를(을) 삭제한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void deleteQustnrRespondInfo(QustnrRespondInfoVO qustnrRespondInfoVO) throws Exception{ + dao.deleteQustnrRespondInfo(qustnrRespondInfoVO); + } + + /** + * 사용자 설문조사(설문등록)를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + @Override + public List selectWebPollRegistPopup(ComDefaultVO searchVO) throws Exception{ + return dao.selectWebPollRegistPopup(searchVO); + } + + @Override + public ModelAndView mngrQustnrRespondInfoResultExcelDown(Map map, HttpServletRequest request) throws Exception{ + + ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); + + Map paramMap = CommUtil.getParameterMap(request); + +// sheet 1 + //설문정보 + paramMap.put("Comtnqestnrinfo", dao.selectQustnrRespondInfoManageComtnqestnrinfo(map)); + //문항정보 + paramMap.put("Comtnqustnrqesitm", dao.selectQustnrRespondInfoManageComtnqustnrqesitm(map)); + paramMap.put("dataList", dao.selectQustnrRespondInfoManageComtnqustnrqesitm(map)); + //항목정보 + paramMap.put("Comtnqustnriem", dao.selectQustnrRespondInfoManageComtnqustnriem(map)); + //설문템플릿ID 설정 + paramMap.put("qestnrTmplatId", map.get("qestnrTmplatId") == null ? "" : (String)map.get("qestnrTmplatId") ); + //설문지정보ID 설정 + paramMap.put("qestnrId", map.get("qestnrId") == null ? "" : (String)map.get("qestnrId")); + //객관식통계 답안 + paramMap.put("qestnrStatistic1", dao.selectQustnrRespondInfoManageStatistics1(map)); + //주관식통계 답안 + paramMap.put("qestnrStatistic2", dao.selectQustnrRespondInfoManageStatistics2(map)); + +// sheet 2 + //문항정보(기타의견만 포함) + paramMap.put("ComtnqustnrqesitmEtc", dao.selectQustnrRespondInfoManageComtnqustnrqesitmEtc(map)); + //항목정보(기타의견만 포함) + paramMap.put("ComtnqustnriemEtc", dao.selectQustnrRespondInfoManageComtnqustnriemEtc(map)); + //항목결과(기타 답변내용) + paramMap.put("ComtnqustnrrspnsresultEtc", dao.selectQustnrRespondInfoComtnqustnrrspnsresultEtc(map)); + + //엑셀 템플릿에 넘겨줄 데이타 + mav.addObject("data", paramMap); + + //다운로드에 사용되어질 엑셀파일 템플릿 + mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, CommUtil.getExcelTemplateName(request, "mngr")); + + //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) +// mav.addObject(ExcelDownloadView.DOWN_FILE_NM, "연계 데이터 통계("+linkVO.getCntOption()+")_"+ CommUtil.getDatePattern("yyyy-MM-dd")); + mav.addObject(ExcelDownloadView.DOWN_FILE_NM, "설문 결과"); + + return mav; + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qri/service/impl/QustnrRespondInfoDao.java b/src/main/java/egovframework/com/uss/olp/qri/service/impl/QustnrRespondInfoDao.java new file mode 100644 index 0000000..6af623d --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qri/service/impl/QustnrRespondInfoDao.java @@ -0,0 +1,221 @@ +package egovframework.com.uss.olp.qri.service.impl; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; +import egovframework.com.uss.olp.qri.service.QustnrRespondInfoVO; + +import org.springframework.stereotype.Repository; +/** + * 설문조사 Dao Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +@Repository("qustnrRespondInfoDao") +public class QustnrRespondInfoDao extends EgovComAbstractDAO { + + + /** + * 설문템플릿을 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrTmplatManage(Map map) throws Exception{ + return list("QustnrRespondInfo.selectQustnrTmplatManages", map); + } + + /** + * 객관식 통계를 조회 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageStatistics1(Map map) throws Exception{ + return list("QustnrRespondInfo.selectQustnrRespondInfoManageStatistics1", map); + } + /** + * 주관식 통계를 조회 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageStatistics2(Map map) throws Exception{ + return list("QustnrRespondInfo.selectQustnrRespondInfoManageStatistics2", map); + } + + /** + * 회원정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public Map selectQustnrRespondInfoManageEmplyrinfo(Map map) throws Exception{ + return (Map)select("QustnrRespondInfo.selectQustnrRespondInfoManageEmplyrinfo", map); + } + + /** + * 설문정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageComtnqestnrinfo(Map map) throws Exception{ + return list("QustnrRespondInfo.selectQustnrRespondInfoManageComtnqestnrinfo", map); + } + /** + * 설문정보(web)를 조회한다. + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageComtnqestnrinfoWeb() throws Exception{ + return list("QustnrRespondInfo.selectQustnrRespondInfoManageComtnqestnrinfoWeb", ""); + } + /** + * 문항정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageComtnqustnrqesitm(Map map) throws Exception{ + return list("QustnrRespondInfo.selectQustnrRespondInfoManageComtnqustnrqesitm", map); + } + + /** + * 기타의견이 있는 문항정보만 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageComtnqustnrqesitmEtc(Map map) throws Exception{ + return list("QustnrRespondInfo.selectQustnrRespondInfoManageComtnqustnrqesitmEtc", map); + } + + /** + * 항목정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageComtnqustnriem(Map map) throws Exception{ + return list("QustnrRespondInfo.selectQustnrRespondInfoManageComtnqustnriem", map); + } + + /** + * 기타의견이 있는 항목정보를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageComtnqustnriemEtc(Map map) throws Exception{ + return list("QustnrRespondInfo.selectQustnrRespondInfoManageComtnqustnriemEtc", map); + } + + /** + * 항목결과(기타 답변내용)를 조회한다. + * @param map - 조회할 정보가 담긴 map + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoComtnqustnrrspnsresultEtc(Map map) throws Exception{ + return list("QustnrRespondInfo.selectQustnrRespondInfoComtnqustnrrspnsresultEtc", map); + } + + /** + * 설문조사(설문등록)를(을) 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrRespondInfoManageList(ComDefaultVO searchVO) throws Exception{ + return list("QustnrRespondInfo.selectQustnrRespondInfoManage", searchVO); + } + + /** + * 설문조사(설문등록)를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrRespondInfoManageListCnt(ComDefaultVO searchVO) throws Exception{ + return (Integer)select("QustnrRespondInfo.selectQustnrRespondInfoManageCnt", searchVO); + } + + /** + * 응답자결과(설문조사) 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + public List selectQustnrRespondInfoList(ComDefaultVO searchVO) throws Exception{ + return list("QustnrRespondInfo.selectQustnrRespondInfo", searchVO); + } + + /** + * 응답자결과(설문조사)를(을) 상세조회 한다. + * @param qustnrRespondInfoVO - 응답자결과(설문조사) 정보 담김 VO + * @throws Exception + */ + public List selectQustnrRespondInfoDetail(QustnrRespondInfoVO qustnrRespondInfoVO) throws Exception{ + return list("QustnrRespondInfo.selectQustnrRespondInfoDetail", qustnrRespondInfoVO); + } + + /** + * 응답자결과(설문조사)를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrRespondInfoListCnt(ComDefaultVO searchVO) throws Exception{ + return (Integer)select("QustnrRespondInfo.selectQustnrRespondInfoCnt", searchVO); + } + + /** + * 응답자결과(설문조사)를(을) 등록한다. + * @param qqustnrRespondInfoVO - 응답자결과(설문조사) 정보 담김 VO + * @throws Exception + */ + public void insertQustnrRespondInfo(QustnrRespondInfoVO qustnrRespondInfoVO) throws Exception{ + insert("QustnrRespondInfo.insertQustnrRespondInfo", qustnrRespondInfoVO); + } + + /** + * 응답자결과(설문조사)를(을) 수정한다. + * @param qustnrRespondInfoVO - 응답자결과(설문조사) 정보 담김 VO + * @throws Exception + */ + public void updateQustnrRespondInfo(QustnrRespondInfoVO qustnrRespondInfoVO) throws Exception{ + insert("QustnrRespondInfo.updateQustnrRespondInfo", qustnrRespondInfoVO); + } + + /** + * 응답자결과(설문조사)를(을) 삭제한다. + * @param qustnrRespondInfoVO - 응답자결과(설문조사) 정보 담김 VO + * @throws Exception + */ + public void deleteQustnrRespondInfo(QustnrRespondInfoVO qustnrRespondInfoVO) throws Exception{ + insert("QustnrRespondInfo.deleteQustnrRespondInfo", qustnrRespondInfoVO); + } + + /** + * 사용자 설문조사(설문등록)를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectWebPollRegistPopup(ComDefaultVO searchVO) throws Exception{ + return list("QustnrRespondInfo.selectWebPollRegistPopup", searchVO); + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qri/web/EgovQustnrRespondInfoController.java b/src/main/java/egovframework/com/uss/olp/qri/web/EgovQustnrRespondInfoController.java new file mode 100644 index 0000000..fc45f77 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qri/web/EgovQustnrRespondInfoController.java @@ -0,0 +1,1120 @@ +package egovframework.com.uss.olp.qri.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.EgovMessageSource; +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.annotation.IncludedInfo; +import egovframework.com.cmm.service.CmmnDetailCode; +import egovframework.com.cmm.service.EgovCmmUseService; +import egovframework.com.cmm.util.EgovUserDetailsHelper; +import egovframework.com.uss.olp.qmc.service.EgovQustnrManageService; +import egovframework.com.uss.olp.qmc.service.QustnrManageVO; +import egovframework.com.uss.olp.qri.service.EgovQustnrRespondInfoService; +import egovframework.com.uss.olp.qri.service.QustnrRespondInfoVO; +import egovframework.com.uss.olp.qrm.service.EgovQustnrRespondManageService; +import egovframework.com.uss.olp.qrm.service.QustnrRespondManageVO; +import egovframework.itgcms.core.popup.service.MngrPopupSearchVO; +import egovframework.itgcms.core.popup.service.MngrPopupService; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +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.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; +import org.springmodules.validation.commons.DefaultBeanValidator; +/** + * 설문조사 Controller Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *   2011.8.26	정진오			IncludedInfo annotation 추가
    + *
    + * 
    + */ + +@Controller +public class EgovQustnrRespondInfoController { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovQustnrRespondInfoController.class); + + @Autowired + private DefaultBeanValidator beanValidator; + + /** EgovMessageSource */ + @Resource(name="egovMessageSource") + EgovMessageSource egovMessageSource; + + @Resource(name = "egovQustnrRespondInfoService") + private EgovQustnrRespondInfoService egovQustnrRespondInfoService; + + @Resource(name = "egovQustnrRespondManageService") + private EgovQustnrRespondManageService egovQustnrRespondManageService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + @Resource(name="EgovCmmUseService") + private EgovCmmUseService cmmUseService; + + /** MngrPopupService */ + @Resource(name = "mngrPopupService") + private MngrPopupService mngrPopupService; + + @Resource(name = "egovQustnrManageService") + private EgovQustnrManageService egovQustnrManageService; + + /** + * 설문템플릿을 적용한다. + * @param searchVO + * @param request + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/template/template" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qri/template/template.do") + public String egovQustnrRespondInfoManageTemplate(@ModelAttribute("searchVO") ComDefaultVO searchVO, HttpServletRequest request, + @RequestParam Map commandMap, ModelMap model) throws Exception { + + String sTemplateUrl = (String)commandMap.get("templateUrl"); + + LOGGER.debug("qestnrId=> {}", commandMap.get("qestnrId")); + LOGGER.debug("qestnrTmplatId=> {}", commandMap.get("qestnrTmplatId")); + LOGGER.debug("templateUrl=> {}", commandMap.get("templateUrl")); + + //설문템플릿정보 + model.addAttribute("QustnrTmplatManage", egovQustnrRespondInfoService.selectQustnrTmplatManage(commandMap)); + //설문정보 + model.addAttribute("Comtnqestnrinfo", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqestnrinfo(commandMap)); + //문항정보 + model.addAttribute("Comtnqustnrqesitm", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnrqesitm(commandMap)); + //항목정보 + model.addAttribute("Comtnqustnriem", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnriem(commandMap)); + //설문템플릿ID 설정 + model.addAttribute("qestnrTmplatId", commandMap.get("qestnrTmplatId") == null ? "" : (String)commandMap.get("qestnrTmplatId") ); + //설문지정보ID 설정 + model.addAttribute("qestnrId", commandMap.get("qestnrId") == null ? "" : (String)commandMap.get("qestnrId")); + //객관식통계 답안 + model.addAttribute("qestnrStatistic1", egovQustnrRespondInfoService.selectQustnrRespondInfoManageStatistics1(commandMap)); + //주관식통계 답안 + model.addAttribute("qestnrStatistic2", egovQustnrRespondInfoService.selectQustnrRespondInfoManageStatistics2(commandMap)); + //이전 주소 + model.addAttribute("returnUrl", request.getHeader("REFERER")); + + return sTemplateUrl; + } + + /** + * 설문조사 전체 통계를 조회한다. + * @param searchVO + * @param request + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/qnn/EgovQustnrRespondInfoManageStatistics" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qnn/EgovQustnrRespondInfoManageStatistics.do") + public String egovQustnrRespondInfoManageStatistics(@ModelAttribute("searchVO") ComDefaultVO searchVO, HttpServletRequest request, + @RequestParam Map commandMap, ModelMap model) throws Exception { + + String sLocationUrl = "egovframework/com/uss/olp/qnn/EgovQustnrRespondInfoManageStatistics"; + + //설문정보 + model.addAttribute("Comtnqestnrinfo", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqestnrinfo(commandMap)); + //문항정보 + model.addAttribute("Comtnqustnrqesitm", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnrqesitm(commandMap)); + //항목정보 + model.addAttribute("Comtnqustnriem", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnriem(commandMap)); + //설문템플릿ID 설정 + model.addAttribute("qestnrTmplatId", commandMap.get("qestnrTmplatId") == null ? "" : (String)commandMap.get("qestnrTmplatId") ); + //설문지정보ID 설정 + model.addAttribute("qestnrId", commandMap.get("qestnrId") == null ? "" : (String)commandMap.get("qestnrId")); + //객관식통계 답안 + model.addAttribute("qestnrStatistic1", egovQustnrRespondInfoService.selectQustnrRespondInfoManageStatistics1(commandMap)); + //주관식통계 답안 + model.addAttribute("qestnrStatistic2", egovQustnrRespondInfoService.selectQustnrRespondInfoManageStatistics2(commandMap)); + //이전 주소 + model.addAttribute("returnUrl", request.getHeader("REFERER")); + + return sLocationUrl; + } + + /** + * 설문조사(설문등록) 목록을 조회한다. + * @param searchVO + * @param request + * @param response + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/qnn/EgovQustnrRespondInfoManageList" + * @throws Exception + */ + @IncludedInfo(name="설문조사", order = 600 ,gid = 50) + @RequestMapping(value="/_mngr_/qnn/EgovQustnrRespondInfoManageList.do") + public String egovQustnrRespondInfoManageList(@ModelAttribute("searchVO") ComDefaultVO searchVO, HttpServletRequest request, HttpServletResponse response, + @RequestParam Map commandMap, ModelMap model) throws Exception { + + /** EgovPropertyService.sample */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("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()); + + List resultList = egovQustnrRespondInfoService.selectQustnrRespondInfoManageList(searchVO); + model.addAttribute("resultList", resultList); + + model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); + model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); + + int totCnt = egovQustnrRespondInfoService.selectQustnrRespondInfoManageListCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "egovframework/com/uss/olp/qnn/EgovQustnrRespondInfoManageList"; + } + + /** + * 설문조사(설문등록)를 등록한다. + * @param searchVO + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/qnn/EgovQustnrRespondInfoManageRegist" + * @throws Exception + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + @RequestMapping(value="/_mngr_/qnn/EgovQustnrRespondInfoManageRegist.do") + public String egovQustnrRespondInfoManageRegist(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, HttpServletRequest request, + ModelMap model) throws Exception { + + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); +// if(loginVO == null){ loginVO = new LoginVO();} + + String sLocationUrl = "egovframework/com/uss/olp/qnn/EgovQustnrRespondInfoManageRegist"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + LOGGER.info("cmd => {}", sCmd); + + //성별코드조회 + ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); + voComCode.setCodeId("COM014"); + List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode014", listComCode); + + //직업코드조회 + voComCode.setCodeId("COM034"); + listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode034", listComCode); + + model.addAttribute("searchVO", searchVO); + + if(sCmd.equals("save")){ + + //설문조사 처리 START + String sKey =""; + String sVal =""; + for(Object key:commandMap.keySet()){ + + sKey = key.toString(); + + //설문문항정보 추출 + if(sKey.length() > 6 && sKey.substring(0, 6).equals("QQESTN")){ + + //설문조사 등록 + //객관식 답안 처리 + if( commandMap.get("TY_"+key).equals("1") ){ + + String[] arrayParam = request.getParameterValues(key.toString()); + if( arrayParam.length == 1 ){ + + sVal = arrayParam[0]; + + QustnrRespondInfoVO qustnrRespondInfoVO = new QustnrRespondInfoVO(); + + qustnrRespondInfoVO.setQestnrTmplatId((String) commandMap.get("qestnrTmplatId")); + qustnrRespondInfoVO.setQestnrId((String) commandMap.get("qestnrId")); + qustnrRespondInfoVO.setQestnrQesitmId(sKey); + qustnrRespondInfoVO.setQustnrIemId(sVal); + + qustnrRespondInfoVO.setRespondAnswerCn(""); + + qustnrRespondInfoVO.setRespondNm((String) commandMap.get("respondNm")); + qustnrRespondInfoVO.setEtcAnswerCn((String) commandMap.get("ETC_" + sVal)); + + + qustnrRespondInfoVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrRespondInfoVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrRespondInfoService.insertQustnrRespondInfo(qustnrRespondInfoVO); + + } else { + + String[] arrVal = arrayParam; + for(int g=0; g < arrVal.length; g++ ){ + //("QQESTN arr :" + arrVal[g]); + QustnrRespondInfoVO qustnrRespondInfoVO = new QustnrRespondInfoVO(); + + qustnrRespondInfoVO.setQestnrTmplatId((String) commandMap.get("qestnrTmplatId")); + qustnrRespondInfoVO.setQestnrId((String) commandMap.get("qestnrId")); + qustnrRespondInfoVO.setQestnrQesitmId(sKey); + qustnrRespondInfoVO.setQustnrIemId(arrVal[g]); + + qustnrRespondInfoVO.setRespondAnswerCn(""); + + qustnrRespondInfoVO.setRespondNm((String) commandMap.get("respondNm")); + qustnrRespondInfoVO.setEtcAnswerCn((String) commandMap.get("ETC_" + arrVal[g])); + + qustnrRespondInfoVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrRespondInfoVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrRespondInfoService.insertQustnrRespondInfo(qustnrRespondInfoVO); + } + } + + //주관식 답안 처리 + } else if(commandMap.get("TY_"+key).equals("2")) { + + QustnrRespondInfoVO qustnrRespondInfoVO = new QustnrRespondInfoVO(); + + qustnrRespondInfoVO.setQestnrTmplatId((String) commandMap.get("qestnrTmplatId")); + qustnrRespondInfoVO.setQestnrId((String) commandMap.get("qestnrId")); + qustnrRespondInfoVO.setQestnrQesitmId(sKey); + qustnrRespondInfoVO.setQustnrIemId(null); + + qustnrRespondInfoVO.setRespondAnswerCn((String) commandMap.get(sKey)); + + qustnrRespondInfoVO.setRespondNm((String) commandMap.get("respondNm")); + qustnrRespondInfoVO.setEtcAnswerCn(null); + + qustnrRespondInfoVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrRespondInfoVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrRespondInfoService.insertQustnrRespondInfo(qustnrRespondInfoVO); + } + } + } + + //설문응답자 처리 + QustnrRespondManageVO qustnrRespondManageVO = new QustnrRespondManageVO(); + + qustnrRespondManageVO.setQestnrId((String) commandMap.get("qestnrId")); + qustnrRespondManageVO.setQestnrTmplatId((String) commandMap.get("qestnrTmplatId")); + + qustnrRespondManageVO.setSexdstnCode((String) commandMap.get("sexdstnCode")); + qustnrRespondManageVO.setOccpTyCode((String) commandMap.get("occpTyCode")); + qustnrRespondManageVO.setBrth((String) commandMap.get("brth")); + qustnrRespondManageVO.setRespondNm((String) commandMap.get("respondNm")); + + qustnrRespondManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrRespondManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + egovQustnrRespondManageService.insertQustnrRespondManage(qustnrRespondManageVO); + + String ReusltScript = ""; + + ReusltScript += ""; + + model.addAttribute("reusltScript", ReusltScript); +// sLocationUrl = "forward:/_mngr_/qnn/EgovQustnrRespondInfoManageList.do"; + return CommUtil.doCompleteUrl(model, "성공", "저장 되었습니다.", "/_mngr_/qnn/EgovQustnrRespondInfoManageList.do"); + + } else { + +// if(loginVO.getUniqId() != null){ +// commandMap.put("uniqId", loginVO.getUniqId()); +// //사용자정보 +// model.addAttribute("Emplyrinfo", egovQustnrRespondInfoService.selectQustnrRespondInfoManageEmplyrinfo(commandMap)); +// } + + //설문템플릿정보 + model.addAttribute("QustnrTmplatManage", egovQustnrRespondInfoService.selectQustnrTmplatManage(commandMap)); + //설문정보 + model.addAttribute("Comtnqestnrinfo", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqestnrinfo(commandMap)); + //문항정보 + model.addAttribute("Comtnqustnrqesitm", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnrqesitm(commandMap)); + //항목정보 + model.addAttribute("Comtnqustnriem", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnriem(commandMap)); + //설문템플릿ID 설정 + model.addAttribute("qestnrTmplatId", commandMap.get("qestnrTmplatId") == null ? "" : (String)commandMap.get("qestnrTmplatId") ); + //설문지정보ID 설정 + model.addAttribute("qestnrId", commandMap.get("qestnrId") == null ? "" : (String)commandMap.get("qestnrId")); + } + + return sLocationUrl; + } + +// /** +// * 응답자결과(설문조사) 목록을 조회한다. +// * @param searchVO +// * @param request +// * @param commandMap +// * @param qustnrRespondInfoVO +// * @param model +// * @return "egovframework/com/uss/olp/qri/EgovQustnrRespondInfoList" +// * @throws Exception +// */ +// @RequestMapping(value="/_mngr_/qri/EgovQustnrRespondInfoList.do") +// public String egovQustnrRespondInfoList(@ModelAttribute("searchVO") ComDefaultVO searchVO, HttpServletRequest request, @RequestParam Map commandMap, +// QustnrRespondInfoVO qustnrRespondInfoVO, ModelMap model) throws Exception { +// +// // 0. Spring Security 사용자권한 처리 +//// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +//// if(!isAuthenticated) { +//// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +//// return "egovframework/com/uat/uia/EgovLoginUsr"; +//// } +// +// //로그인 객체 선언 +//// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); +//// if(loginVO == null){ loginVO = new LoginVO();} +// +// String sSearchMode = commandMap.get("searchMode") == null ? "" : (String)commandMap.get("searchMode"); +// +// //설문지정보에서 넘어오면 자동검색 설정 +// if(sSearchMode.equals("Y")){ +//// searchVO.setSearchCondition("QESTNR_ID"); +// searchVO.setSearchKeyword0(qustnrRespondInfoVO.getQestnrId()); +// } +// +// /** EgovPropertyService.sample */ +// searchVO.setPageUnit(propertiesService.getInt("pageUnit")); +// searchVO.setPageSize(propertiesService.getInt("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()); +// +// List resultList = egovQustnrRespondInfoService.selectQustnrRespondInfoList(searchVO); +// model.addAttribute("resultList", resultList); +// +// model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); +// model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); +// +// int totCnt = egovQustnrRespondInfoService.selectQustnrRespondInfoListCnt(searchVO); +// paginationInfo.setTotalRecordCount(totCnt); +// model.addAttribute("paginationInfo", paginationInfo); +// +// return "egovframework/com/uss/olp/qri/exVer_EgovQustnrRespondInfoList"; +// } + + /** + * 응답자결과(설문조사) 목록을 조회한다. + * @param searchVO + * @param request + * @param commandMap + * @param qustnrRespondInfoVO + * @param model + * @return "egovframework/com/uss/olp/qri/EgovQustnrRespondInfoList" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qri/EgovQustnrRespondInfoList.do") + public String egovQustnrRespondInfoList(@ModelAttribute("searchVO") ComDefaultVO searchVO, HttpServletRequest request, @RequestParam Map commandMap, + QustnrRespondInfoVO qustnrRespondInfoVO, ModelMap model) throws Exception { + + /** EgovPropertyService.sample */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("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()); + + List sampleList = egovQustnrManageService.selectQustnrManageList(searchVO); + model.addAttribute("resultList", sampleList); + + model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); + model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); + + int totCnt = egovQustnrManageService.selectQustnrManageListCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "egovframework/com/uss/olp/qri/EgovQustnrRespondInfoList"; + } + +// /** +// * 응답자결과(설문조사) 목록을 상세조회 조회한다. +// * @param searchVO +// * @param qustnrRespondInfoVO +// * @param commandMap +// * @param model +// * @return +// * @throws Exception +// */ +// @RequestMapping(value="/_mngr_/qri/EgovQustnrRespondInfoDetail.do") +// public String egovQustnrRespondInfoDetail(@ModelAttribute("searchVO") ComDefaultVO searchVO, QustnrRespondInfoVO qustnrRespondInfoVO, +// @RequestParam Map commandMap, ModelMap model) throws Exception { +// +// String sLocationUrl = "egovframework/com/uss/olp/qri/EgovQustnrRespondInfoDetail"; +// +// String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); +// +// if(sCmd.equals("del")){ +// +// egovQustnrRespondInfoService.deleteQustnrRespondInfo(qustnrRespondInfoVO); +// sLocationUrl = "redirect:/_mngr_/qri/EgovQustnrRespondInfoList.do"; +// +// } else { +// +// List resultList = egovQustnrRespondInfoService.selectQustnrRespondInfoDetail(qustnrRespondInfoVO); +// model.addAttribute("resultList", resultList); +// } +// +// return sLocationUrl; +// } + + /** + * 설문조사 전체 결과(통계)를 조회한다. + * @param searchVO + * @param request + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/qri/EgovQustnrRespondInfoResult" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qri/EgovQustnrRespondInfoResult.do") + public String egovQustnrRespondInfoResult(@ModelAttribute("searchVO") ComDefaultVO searchVO, HttpServletRequest request, + @RequestParam Map commandMap, ModelMap model) throws Exception { + + String sLocationUrl = "egovframework/com/uss/olp/qri/EgovQustnrRespondInfoResult"; + + //설문정보 + model.addAttribute("Comtnqestnrinfo", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqestnrinfo(commandMap)); + //문항정보 + model.addAttribute("Comtnqustnrqesitm", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnrqesitm(commandMap)); + //항목정보 + model.addAttribute("Comtnqustnriem", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnriem(commandMap)); + //설문템플릿ID 설정 + model.addAttribute("qestnrTmplatId", commandMap.get("qestnrTmplatId") == null ? "" : (String)commandMap.get("qestnrTmplatId") ); + //설문지정보ID 설정 + model.addAttribute("qestnrId", commandMap.get("qestnrId") == null ? "" : (String)commandMap.get("qestnrId")); + //객관식통계 답안 + model.addAttribute("qestnrStatistic1", egovQustnrRespondInfoService.selectQustnrRespondInfoManageStatistics1(commandMap)); + //주관식통계 답안 + model.addAttribute("qestnrStatistic2", egovQustnrRespondInfoService.selectQustnrRespondInfoManageStatistics2(commandMap)); + //문항정보(기타의견만 포함) + model.addAttribute("ComtnqustnrqesitmEtc", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnrqesitmEtc(commandMap)); + //항목정보(기타의견만 포함) + model.addAttribute("ComtnqustnriemEtc", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnriemEtc(commandMap)); + //항목결과(기타 답변내용) + model.addAttribute("ComtnqustnrrspnsresultEtc", egovQustnrRespondInfoService.selectQustnrRespondInfoComtnqustnrrspnsresultEtc(commandMap)); + + //이전 주소 + model.addAttribute("returnUrl", request.getHeader("REFERER")); + + return sLocationUrl; + } + + /** + * 설문조사 전체 결과(통계)를 엑셀다운로드한다. + * @param searchVO + * @param request + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/qri/mngrQustnrRespondInfoResultExcelDown" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qri/mngrQustnrRespondInfoResultExcelDown.do") + public ModelAndView mngrQustnrRespondInfoResultExcelDown(@ModelAttribute("searchVO") ComDefaultVO searchVO, HttpServletRequest request, + @RequestParam Map commandMap, ModelMap model) throws Exception { + + return egovQustnrRespondInfoService.mngrQustnrRespondInfoResultExcelDown(commandMap, request); + } + + /** + * 응답자결과(설문조사)를 수정한다. + * @param searchVO + * @param commandMap + * @param request + * @param qustnrRespondInfoVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/qri/EgovQustnrRespondInfoModify" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qri/EgovQustnrRespondInfoModify.do") + public String qustnrRespondInfoModify(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, HttpServletRequest request, + @ModelAttribute("qustnrRespondInfoVO") QustnrRespondInfoVO qustnrRespondInfoVO, BindingResult bindingResult, ModelMap model) throws Exception { + + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); +// if(loginVO == null){ loginVO = new LoginVO();} + + String sLocationUrl = "egovframework/com/uss/olp/qri/EgovQustnrRespondInfoModify"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + + if(sCmd.equals("save")){ + //서버 validate 체크 + beanValidator.validate(qustnrRespondInfoVO, bindingResult); + if(bindingResult.hasErrors()){ + return sLocationUrl; + } + + //아이디 설정 + qustnrRespondInfoVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrRespondInfoVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrRespondInfoService.updateQustnrRespondInfo(qustnrRespondInfoVO); + sLocationUrl = "redirect:/_mngr_/qri/EgovQustnrRespondInfoList.do"; + + } else { + + List resultList = egovQustnrRespondInfoService.selectQustnrRespondInfoDetail(qustnrRespondInfoVO); + model.addAttribute("resultList", resultList); + } + + return sLocationUrl; + } + + /** + * 응답자결과(설문조사)를 등록한다. + * @param searchVO + * @param commandMap + * @param request + * @param qustnrRespondInfoVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/qri/EgovQustnrRespondInfoRegist" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qri/EgovQustnrRespondInfoRegist.do") + public String qustnrRespondInfoRegist(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, HttpServletRequest request, + @ModelAttribute("qustnrRespondInfoVO") QustnrRespondInfoVO qustnrRespondInfoVO, BindingResult bindingResult, ModelMap model) throws Exception { + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); +// if(loginVO == null){ loginVO = new LoginVO();} + + String sLocationUrl = "egovframework/com/uss/olp/qri/EgovQustnrRespondInfoRegist"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + LOGGER.info("cmd => {}", sCmd); + + if(sCmd.equals("save")){ + //서버 validate 체크 + beanValidator.validate(qustnrRespondInfoVO, bindingResult); + if(bindingResult.hasErrors()){ + return sLocationUrl; + } + + //아이디 설정 + qustnrRespondInfoVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrRespondInfoVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrRespondInfoService.insertQustnrRespondInfo(qustnrRespondInfoVO); + sLocationUrl = "redirect:/_mngr_/qri/EgovQustnrRespondInfoList.do"; + } + + return sLocationUrl; + } + + /** + * 사용자 - 설문조사(설문등록) 목록을 조회한다. + * @param searchVO + * @param request + * @param response + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/web/pollList" + * @throws Exception + */ + @IncludedInfo(name="설문조사", order = 600 ,gid = 50) + @RequestMapping(value="/web/program/poll.do") + public String webPollList(@ModelAttribute("searchVO") ComDefaultVO searchVO, HttpServletRequest request, HttpServletResponse response, + @RequestParam Map commandMap, ModelMap model) throws Exception { + +// /** EgovPropertyService.sample */ +// searchVO.setPageUnit(propertiesService.getInt("pageUnit")); +// searchVO.setPageSize(propertiesService.getInt("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()); +// +// List resultList = egovQustnrRespondInfoService.selectQustnrRespondInfoManageList(searchVO); +// model.addAttribute("resultList", resultList); +// +// model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); +// model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); +// +// int totCnt = egovQustnrRespondInfoService.selectQustnrRespondInfoManageListCnt(searchVO); +// paginationInfo.setTotalRecordCount(totCnt); +// model.addAttribute("paginationInfo", paginationInfo); + + return "egovframework/com/uss/olp/web/pollList"; + } + + /** + * 사용자 - 설문조사 등록 전 Key를 전달한다. + * @param searchVO + * @param commandMap + * @param request + * @param qustnrManageVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/web/pollRegistPre" + * @throws Exception + */ + @RequestMapping(value="/web/contents/pollRegistPre.do") + public String webPollRegistPre(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, ModelMap model, HttpServletRequest request) throws Exception { + + String sLocationUrl = "egovframework/com/uss/olp/web/pollRegistPre"; + + //설문정보 + List resultList = egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqestnrinfoWeb(); + + if(resultList.size() != 0 ){ + + QustnrManageVO qustnrManageVO = new QustnrManageVO(); + + qustnrManageVO = (QustnrManageVO) resultList.get(0); + + String qestnrId = qustnrManageVO.getQestnrId(); + String qestnrTmplatId = qustnrManageVO.getQestnrTmplatId(); + + model.addAttribute("qestnrTmplatId", qestnrTmplatId); + model.addAttribute("qestnrId", qestnrId); + + } else { + + return CommUtil.doCompleteUrl(model, "설문없음", "현재 진행중인 설문조사가 없습니다.", "/web/main/index.do"); + } + + return sLocationUrl; + } + + /** + * 사용자 - 설문조사를 등록한다. + * @param searchVO + * @param commandMap + * @param request + * @param qustnrRespondInfoVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/web/pollRegist" + * @throws Exception + */ + @RequestMapping(value="/web/contents/pollRegist.do") + public String webPollRegist(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, ModelMap model, HttpServletRequest request) throws Exception { + + String sLocationUrl = "egovframework/com/uss/olp/web/pollRegist"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + LOGGER.info("cmd => {}", sCmd); + + //성별코드조회 + ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); + voComCode.setCodeId("COM014"); + List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode014", listComCode); + + //직업코드조회 + voComCode.setCodeId("COM034"); + listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode034", listComCode); + + model.addAttribute("searchVO", searchVO); + + if(sCmd.equals("save")){ + + //설문조사 처리 START + String sKey =""; + String sVal =""; + for(Object key:commandMap.keySet()){ + + sKey = key.toString(); + + //설문문항정보 추출 + if(sKey.length() > 6 && sKey.substring(0, 6).equals("QQESTN")){ + + //설문조사 등록 + //객관식 답안 처리 + if( commandMap.get("TY_"+key).equals("1") ){ + + String[] arrayParam = request.getParameterValues(key.toString()); + if( arrayParam.length == 1 ){ + + sVal = arrayParam[0]; + + QustnrRespondInfoVO qustnrRespondInfoVO = new QustnrRespondInfoVO(); + + qustnrRespondInfoVO.setQestnrTmplatId((String) commandMap.get("qestnrTmplatId")); + qustnrRespondInfoVO.setQestnrId((String) commandMap.get("qestnrId")); + qustnrRespondInfoVO.setQestnrQesitmId(sKey); + qustnrRespondInfoVO.setQustnrIemId(sVal); + + qustnrRespondInfoVO.setRespondAnswerCn(""); + + qustnrRespondInfoVO.setRespondNm((String) commandMap.get("respondNm")); + qustnrRespondInfoVO.setEtcAnswerCn((String) commandMap.get("ETC_" + sVal)); + + + qustnrRespondInfoVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrRespondInfoVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrRespondInfoService.insertQustnrRespondInfo(qustnrRespondInfoVO); + + } else { + + String[] arrVal = arrayParam; + for(int g=0; g < arrVal.length; g++ ){ + //("QQESTN arr :" + arrVal[g]); + QustnrRespondInfoVO qustnrRespondInfoVO = new QustnrRespondInfoVO(); + + qustnrRespondInfoVO.setQestnrTmplatId((String) commandMap.get("qestnrTmplatId")); + qustnrRespondInfoVO.setQestnrId((String) commandMap.get("qestnrId")); + qustnrRespondInfoVO.setQestnrQesitmId(sKey); + qustnrRespondInfoVO.setQustnrIemId(arrVal[g]); + + qustnrRespondInfoVO.setRespondAnswerCn(""); + + qustnrRespondInfoVO.setRespondNm((String) commandMap.get("respondNm")); + qustnrRespondInfoVO.setEtcAnswerCn((String) commandMap.get("ETC_" + arrVal[g])); + + qustnrRespondInfoVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrRespondInfoVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrRespondInfoService.insertQustnrRespondInfo(qustnrRespondInfoVO); + } + } + + //주관식 답안 처리 + } else if(commandMap.get("TY_"+key).equals("2")) { + + QustnrRespondInfoVO qustnrRespondInfoVO = new QustnrRespondInfoVO(); + + qustnrRespondInfoVO.setQestnrTmplatId((String) commandMap.get("qestnrTmplatId")); + qustnrRespondInfoVO.setQestnrId((String) commandMap.get("qestnrId")); + qustnrRespondInfoVO.setQestnrQesitmId(sKey); + qustnrRespondInfoVO.setQustnrIemId(null); + + qustnrRespondInfoVO.setRespondAnswerCn((String) commandMap.get(sKey)); + + qustnrRespondInfoVO.setRespondNm((String) commandMap.get("respondNm")); + qustnrRespondInfoVO.setEtcAnswerCn(null); + + qustnrRespondInfoVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrRespondInfoVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrRespondInfoService.insertQustnrRespondInfo(qustnrRespondInfoVO); + } + } + } + + //설문응답자 처리 + QustnrRespondManageVO qustnrRespondManageVO = new QustnrRespondManageVO(); + + qustnrRespondManageVO.setQestnrId((String) commandMap.get("qestnrId")); + qustnrRespondManageVO.setQestnrTmplatId((String) commandMap.get("qestnrTmplatId")); + + qustnrRespondManageVO.setSexdstnCode((String) commandMap.get("sexdstnCode")); + qustnrRespondManageVO.setOccpTyCode((String) commandMap.get("occpTyCode")); + qustnrRespondManageVO.setBrth((String) commandMap.get("brth")); + qustnrRespondManageVO.setRespondNm((String) commandMap.get("respondNm")); + + qustnrRespondManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrRespondManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + egovQustnrRespondManageService.insertQustnrRespondManage(qustnrRespondManageVO); + + String ReusltScript = ""; + + ReusltScript += ""; + + model.addAttribute("reusltScript", ReusltScript); +// sLocationUrl = "forward:/_mngr_/qnn/EgovQustnrRespondInfoManageList.do"; + return CommUtil.doCompleteUrl(model, "성공", "설문참여에 응해주셔서 감사합니다.", "/web/main/index.do"); + + } else { + + + //설문정보 + model.addAttribute("Comtnqestnrinfo", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqestnrinfo(commandMap)); + //설문템플릿정보 + model.addAttribute("QustnrTmplatManage", egovQustnrRespondInfoService.selectQustnrTmplatManage(commandMap)); + //문항정보 + model.addAttribute("Comtnqustnrqesitm", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnrqesitm(commandMap)); + //항목정보 + model.addAttribute("Comtnqustnriem", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnriem(commandMap)); + //설문템플릿ID 설정 + model.addAttribute("qestnrTmplatId", commandMap.get("qestnrTmplatId") == null ? "" : (String)commandMap.get("qestnrTmplatId") ); + //설문지정보ID 설정 + model.addAttribute("qestnrId", commandMap.get("qestnrId") == null ? "" : (String)commandMap.get("qestnrId")); + //시스템 설정 +// model.addAttribute("systemconfigVO", CommUtil.getSystemconfigVO(request, "systemconfig"+"web")); + + MngrPopupSearchVO mngrPopupSearchVO = new MngrPopupSearchVO(); + mngrPopupSearchVO.setSchPopupType("3"); //배너 + mngrPopupSearchVO.setFirstIndex(0); + mngrPopupSearchVO.setLastIndex(1000); + mngrPopupSearchVO.setSchActive("Y"); + mngrPopupSearchVO.setOrdBy("asc"); + mngrPopupSearchVO.setOrdFld("popup_order"); + + model.addAttribute("popupBannerList", mngrPopupService.mngrPopupList(mngrPopupSearchVO)); + } + + return sLocationUrl; + } + + /** + * 사용자 설문조사 팝업 프레임을 조회한다. + * @param searchVO + * @param commandMap + * @param qustnrManageVO + * @param model + * @return "egovframework/com/uss/olp/web/pollRegistPopupFrame" + * @throws Exception + */ + @RequestMapping(value="/web/contents/pollRegistPopupFrame.do") + public String webPollRegistPopupFrame(@ModelAttribute("searchVO") ComDefaultVO searchVO, HttpServletRequest request, ModelMap model) throws Exception { + +// List resultList = egovQustnrRespondInfoService.selectWebPollRegistPopup(searchVO); +// model.addAttribute("resultList", resultList); + + return "egovframework/com/uss/olp/web/pollRegistPopupFrame"; + } + + /** + * 사용자 설문조사 팝업을 조회한다. + * @param searchVO + * @param commandMap + * @param qustnrManageVO + * @param model + * @return "egovframework/com/uss/olp/web/pollRegistPopup" + * @throws Exception + */ + @RequestMapping(value="/web/contents/pollRegistPopup.do") + public String webPollRegistPopup(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, ModelMap model, + HttpServletRequest request) throws Exception { + + String sLocationUrl = "egovframework/com/uss/olp/web/pollRegistPopup"; + +// String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); +// LOGGER.info("cmd => {}", sCmd); +// +// //성별코드조회 +// ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); +// voComCode.setCodeId("COM014"); +// List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); +// model.addAttribute("comCode014", listComCode); +// +// //직업코드조회 +// voComCode.setCodeId("COM034"); +// listComCode = cmmUseService.selectCmmCodeDetail(voComCode); +// model.addAttribute("comCode034", listComCode); +// +// model.addAttribute("searchVO", searchVO); +// +// if(sCmd.equals("save")){ +// +// //설문조사 처리 START +// String sKey =""; +// String sVal =""; +// for(Object key:commandMap.keySet()){ +// +// sKey = key.toString(); +// +// //설문문항정보 추출 +// if(sKey.length() > 6 && sKey.substring(0, 6).equals("QQESTN")){ +// +// //설문조사 등록 +// //객관식 답안 처리 +// if( commandMap.get("TY_"+key).equals("1") ){ +// +// String[] arrayParam = request.getParameterValues(key.toString()); +// if( arrayParam.length == 1 ){ +// +// sVal = arrayParam[0]; +// +// QustnrRespondInfoVO qustnrRespondInfoVO = new QustnrRespondInfoVO(); +// +// qustnrRespondInfoVO.setQestnrTmplatId((String) commandMap.get("qestnrTmplatId")); +// qustnrRespondInfoVO.setQestnrId((String) commandMap.get("qestnrId")); +// qustnrRespondInfoVO.setQestnrQesitmId(sKey); +// qustnrRespondInfoVO.setQustnrIemId(sVal); +// +// qustnrRespondInfoVO.setRespondAnswerCn(""); +// +// qustnrRespondInfoVO.setRespondNm((String) commandMap.get("respondNm")); +// qustnrRespondInfoVO.setEtcAnswerCn((String) commandMap.get("ETC_" + sVal)); +// +// +// qustnrRespondInfoVO.setFrstRegisterId(CommUtil.getMngrMemId()); +// qustnrRespondInfoVO.setLastUpdusrId(CommUtil.getMngrMemId()); +// +// egovQustnrRespondInfoService.insertQustnrRespondInfo(qustnrRespondInfoVO); +// +// } else { +// +// String[] arrVal = arrayParam; +// for(int g=0; g < arrVal.length; g++ ){ +// //("QQESTN arr :" + arrVal[g]); +// QustnrRespondInfoVO qustnrRespondInfoVO = new QustnrRespondInfoVO(); +// +// qustnrRespondInfoVO.setQestnrTmplatId((String) commandMap.get("qestnrTmplatId")); +// qustnrRespondInfoVO.setQestnrId((String) commandMap.get("qestnrId")); +// qustnrRespondInfoVO.setQestnrQesitmId(sKey); +// qustnrRespondInfoVO.setQustnrIemId(arrVal[g]); +// +// qustnrRespondInfoVO.setRespondAnswerCn(""); +// +// qustnrRespondInfoVO.setRespondNm((String) commandMap.get("respondNm")); +// qustnrRespondInfoVO.setEtcAnswerCn((String) commandMap.get("ETC_" + arrVal[g])); +// +// qustnrRespondInfoVO.setFrstRegisterId(CommUtil.getMngrMemId()); +// qustnrRespondInfoVO.setLastUpdusrId(CommUtil.getMngrMemId()); +// +// egovQustnrRespondInfoService.insertQustnrRespondInfo(qustnrRespondInfoVO); +// } +// } +// +// //주관식 답안 처리 +// } else if(commandMap.get("TY_"+key).equals("2")) { +// +// QustnrRespondInfoVO qustnrRespondInfoVO = new QustnrRespondInfoVO(); +// +// qustnrRespondInfoVO.setQestnrTmplatId((String) commandMap.get("qestnrTmplatId")); +// qustnrRespondInfoVO.setQestnrId((String) commandMap.get("qestnrId")); +// qustnrRespondInfoVO.setQestnrQesitmId(sKey); +// qustnrRespondInfoVO.setQustnrIemId(null); +// +// qustnrRespondInfoVO.setRespondAnswerCn((String) commandMap.get(sKey)); +// +// qustnrRespondInfoVO.setRespondNm((String) commandMap.get("respondNm")); +// qustnrRespondInfoVO.setEtcAnswerCn(null); +// +// qustnrRespondInfoVO.setFrstRegisterId(CommUtil.getMngrMemId()); +// qustnrRespondInfoVO.setLastUpdusrId(CommUtil.getMngrMemId()); +// +// egovQustnrRespondInfoService.insertQustnrRespondInfo(qustnrRespondInfoVO); +// } +// } +// } +// +// //설문응답자 처리 +// QustnrRespondManageVO qustnrRespondManageVO = new QustnrRespondManageVO(); +// +// qustnrRespondManageVO.setQestnrId((String) commandMap.get("qestnrId")); +// qustnrRespondManageVO.setQestnrTmplatId((String) commandMap.get("qestnrTmplatId")); +// +// qustnrRespondManageVO.setSexdstnCode((String) commandMap.get("sexdstnCode")); +// qustnrRespondManageVO.setOccpTyCode((String) commandMap.get("occpTyCode")); +// qustnrRespondManageVO.setBrth((String) commandMap.get("brth")); +// qustnrRespondManageVO.setRespondNm((String) commandMap.get("respondNm")); +// +// qustnrRespondManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); +// qustnrRespondManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); +// egovQustnrRespondManageService.insertQustnrRespondManage(qustnrRespondManageVO); +// +// String ReusltScript = ""; +// +// ReusltScript += ""; +// +// model.addAttribute("reusltScript", ReusltScript); +//// sLocationUrl = "forward:/_mngr_/qnn/EgovQustnrRespondInfoManageList.do"; +// return CommUtil.doCompleteUrl(model, "성공", "설문참여에 응해주셔서 감사합니다.", ""); +// +// } else { +// +// //설문템플릿정보 +// model.addAttribute("QustnrTmplatManage", egovQustnrRespondInfoService.selectQustnrTmplatManage(commandMap)); +// //설문정보 +// model.addAttribute("Comtnqestnrinfo", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqestnrinfo(commandMap)); +// //문항정보 +// model.addAttribute("Comtnqustnrqesitm", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnrqesitm(commandMap)); +// //항목정보 +// model.addAttribute("Comtnqustnriem", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnriem(commandMap)); +// //설문템플릿ID 설정 +// model.addAttribute("qestnrTmplatId", commandMap.get("qestnrTmplatId") == null ? "" : (String)commandMap.get("qestnrTmplatId") ); +// //설문지정보ID 설정 +// model.addAttribute("qestnrId", commandMap.get("qestnrId") == null ? "" : (String)commandMap.get("qestnrId")); +// //시스템 설정 +//// model.addAttribute("systemconfigVO", CommUtil.getSystemconfigVO(request, "systemconfig"+"web")); +// } + + return sLocationUrl; + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qrm/service/EgovQustnrRespondManageService.java b/src/main/java/egovframework/com/uss/olp/qrm/service/EgovQustnrRespondManageService.java new file mode 100644 index 0000000..d314aaf --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qrm/service/EgovQustnrRespondManageService.java @@ -0,0 +1,70 @@ +package egovframework.com.uss.olp.qrm.service; + +import java.util.List; + +import egovframework.com.cmm.ComDefaultVO; +/** + * 설문응답자관리 Service Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +public interface EgovQustnrRespondManageService { + + /** + * 응답자정보 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrRespondManageList(ComDefaultVO searchVO) throws Exception; + + /** + * 응답자정보를(을) 상세조회 한다. + * @param qustnrRespondManageVO - 응답자정보 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrRespondManageDetail(QustnrRespondManageVO qustnrRespondManageVO) throws Exception; + + /** + * 응답자정보를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrRespondManageListCnt(ComDefaultVO searchVO) throws Exception; + + /** + * 응답자정보를(을) 등록한다. + * @param qustnrRespondManageVO - 응답자정보 정보 담김 VO + * @throws Exception + */ + void insertQustnrRespondManage(QustnrRespondManageVO qustnrRespondManageVO) throws Exception; + + /** + * 응답자정보를(을) 수정한다. + * @param qustnrRespondManageVO - 응답자정보 정보 담김 VO + * @throws Exception + */ + void updateQustnrRespondManage(QustnrRespondManageVO qustnrRespondManageVO) throws Exception; + + /** + * 응답자정보를(을) 삭제한다. + * @param qustnrRespondManageVO - 응답자정보 정보 담김 VO + * @throws Exception + */ + void deleteQustnrRespondManage(QustnrRespondManageVO qustnrRespondManageVO) throws Exception; + + +} diff --git a/src/main/java/egovframework/com/uss/olp/qrm/service/QustnrRespondManageVO.java b/src/main/java/egovframework/com/uss/olp/qrm/service/QustnrRespondManageVO.java new file mode 100644 index 0000000..00f723d --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qrm/service/QustnrRespondManageVO.java @@ -0,0 +1,292 @@ +package egovframework.com.uss.olp.qrm.service; + +import java.io.Serializable; +/** + * 설문응답자관리 VO Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +public class QustnrRespondManageVO implements Serializable { + + private static final long serialVersionUID = -4378392561239344699L; + + /** 설문지ID */ + private String qestnrId = ""; + + /** 설문응답자아이디 */ + private String qestnrRespondId = ""; + + /** 설별코드 */ + private String sexdstnCode = ""; + + /** 직업유형코드 */ + private String occpTyCode = ""; + + /** 응답자명 */ + private String respondNm = ""; + + /** 생년월일 */ + private String brth = ""; + + /** 첫번째전화번호 */ + private String areaNo = ""; + + /** 두번째전화번호 */ + private String middleTelno = ""; + + /** 마지막전화번호 */ + private String endTelno = ""; + + /** 최초등록시점 */ + private String frstRegisterPnttm = ""; + + /** 최초등록자ID */ + private String frstRegisterId = ""; + + /** 최종수정시점 */ + private String lastUpdusrPnttm = ""; + + /** 최종수정ID */ + private String lastUpdusrId = ""; + + /** 설문템플릿ID */ + private String qestnrTmplatId = ""; + + /** + * qestnrId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrId() { + return qestnrId; + } + + /** + * qestnrId attribute 값을 설정한다. + * @return qestnrId String + */ + public void setQestnrId(String qestnrId) { + this.qestnrId = qestnrId; + } + + /** + * qestnrRespondId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrRespondId() { + return qestnrRespondId; + } + + /** + * qestnrRespondId attribute 값을 설정한다. + * @return qestnrRespondId String + */ + public void setQestnrRespondId(String qestnrRespondId) { + this.qestnrRespondId = qestnrRespondId; + } + + /** + * sexdstnCode attribute 를 리턴한다. + * @return the String + */ + public String getSexdstnCode() { + return sexdstnCode; + } + + /** + * sexdstnCode attribute 값을 설정한다. + * @return sexdstnCode String + */ + public void setSexdstnCode(String sexdstnCode) { + this.sexdstnCode = sexdstnCode; + } + + /** + * occpTyCode attribute 를 리턴한다. + * @return the String + */ + public String getOccpTyCode() { + return occpTyCode; + } + + /** + * occpTyCode attribute 값을 설정한다. + * @return occpTyCode String + */ + public void setOccpTyCode(String occpTyCode) { + this.occpTyCode = occpTyCode; + } + + /** + * respondNm attribute 를 리턴한다. + * @return the String + */ + public String getRespondNm() { + return respondNm; + } + + /** + * respondNm attribute 값을 설정한다. + * @return respondNm String + */ + public void setRespondNm(String respondNm) { + this.respondNm = respondNm; + } + + /** + * brth attribute 를 리턴한다. + * @return the String + */ + public String getBrth() { + return brth; + } + + /** + * brth attribute 값을 설정한다. + * @return brth String + */ + public void setBrth(String brth) { + this.brth = brth; + } + + /** + * areaNo attribute 를 리턴한다. + * @return the String + */ + public String getAreaNo() { + return areaNo; + } + + /** + * areaNo attribute 값을 설정한다. + * @return areaNo String + */ + public void setAreaNo(String areaNo) { + this.areaNo = areaNo; + } + + /** + * middleTelno attribute 를 리턴한다. + * @return the String + */ + public String getMiddleTelno() { + return middleTelno; + } + + /** + * middleTelno attribute 값을 설정한다. + * @return middleTelno String + */ + public void setMiddleTelno(String middleTelno) { + this.middleTelno = middleTelno; + } + + /** + * endTelno attribute 를 리턴한다. + * @return the String + */ + public String getEndTelno() { + return endTelno; + } + + /** + * endTelno attribute 값을 설정한다. + * @return endTelno String + */ + public void setEndTelno(String endTelno) { + this.endTelno = endTelno; + } + + /** + * frstRegisterPnttm attribute 를 리턴한다. + * @return the String + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * frstRegisterPnttm attribute 값을 설정한다. + * @return frstRegisterPnttm String + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } + + /** + * frstRegisterId attribute 를 리턴한다. + * @return the String + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * @return frstRegisterId String + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * lastUpdusrPnttm attribute 를 리턴한다. + * @return the String + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * lastUpdusrPnttm attribute 값을 설정한다. + * @return lastUpdusrPnttm String + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * lastUpdusrId attribute 를 리턴한다. + * @return the String + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * @return lastUpdusrId String + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + /** + * qestnrTmplatId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrTmplatId() { + return qestnrTmplatId; + } + + /** + * qestnrTmplatId attribute 값을 설정한다. + * @return qestnrTmplatId String + */ + public void setQestnrTmplatId(String qestnrTmplatId) { + this.qestnrTmplatId = qestnrTmplatId; + } + + + +} diff --git a/src/main/java/egovframework/com/uss/olp/qrm/service/impl/EgovQustnrRespondManageServiceImpl.java b/src/main/java/egovframework/com/uss/olp/qrm/service/impl/EgovQustnrRespondManageServiceImpl.java new file mode 100644 index 0000000..8c9137e --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qrm/service/impl/EgovQustnrRespondManageServiceImpl.java @@ -0,0 +1,110 @@ +package egovframework.com.uss.olp.qrm.service.impl; + +import java.util.List; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.uss.olp.qrm.service.EgovQustnrRespondManageService; +import egovframework.com.uss.olp.qrm.service.QustnrRespondManageVO; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; +/** + * 설문응답자관리 ServiceImpl Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +@Service("egovQustnrRespondManageService") +public class EgovQustnrRespondManageServiceImpl extends EgovAbstractServiceImpl implements EgovQustnrRespondManageService{ + + //final private Log log = LogFactory.getLog(this.getClass()); + + @Resource(name="qustnrRespondManageDao") + private QustnrRespondManageDao dao; + + + @Resource(name="qustnrRespondManageIdGnrService") + private EgovIdGnrService idgenService; + + /** + * 응답자정보 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondManageList(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrRespondManageList(searchVO); + } + + /** + * 응답자정보를(을) 상세조회 한다. + * @param QustnrRespondManage - 회정정보가 담김 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrRespondManageDetail(QustnrRespondManageVO qustnrRespondManageVO) throws Exception{ + return dao.selectQustnrRespondManageDetail(qustnrRespondManageVO); + } + + /** + * 응답자정보를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + @Override + public int selectQustnrRespondManageListCnt(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrRespondManageListCnt(searchVO); + } + + /** + * 응답자정보를(을) 등록한다. + * @param qustnrRespondManageVO - 응답자정보 정보가 담긴 VO + * @throws Exception + */ + @Override + public void insertQustnrRespondManage(QustnrRespondManageVO qustnrRespondManageVO) throws Exception { + String sMakeId = idgenService.getNextStringId(); + + qustnrRespondManageVO.setQestnrRespondId(sMakeId); + + dao.insertQustnrRespondManage(qustnrRespondManageVO); + } + + /** + * 응답자정보를(을) 수정한다. + * @param qustnrRespondManageVO - 응답자정보 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void updateQustnrRespondManage(QustnrRespondManageVO qustnrRespondManageVO) throws Exception{ + dao.updateQustnrRespondManage(qustnrRespondManageVO); + } + + /** + * 응답자정보를(을) 삭제한다. + * @param qustnrRespondManageVO - 응답자정보 정보가 담긴 VO + * @return + * @throws Exception + */ + @Override + public void deleteQustnrRespondManage(QustnrRespondManageVO qustnrRespondManageVO) throws Exception{ + dao.deleteQustnrRespondManage(qustnrRespondManageVO); + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qrm/service/impl/QustnrRespondManageDao.java b/src/main/java/egovframework/com/uss/olp/qrm/service/impl/QustnrRespondManageDao.java new file mode 100644 index 0000000..edc441f --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qrm/service/impl/QustnrRespondManageDao.java @@ -0,0 +1,85 @@ +package egovframework.com.uss.olp.qrm.service.impl; + +import java.util.List; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; +import egovframework.com.uss.olp.qrm.service.QustnrRespondManageVO; + +import org.springframework.stereotype.Repository; +/** + * 설문응답자관리 Dao Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +@Repository("qustnrRespondManageDao") +public class QustnrRespondManageDao extends EgovComAbstractDAO { + + /** + * 응답자정보 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrRespondManageList(ComDefaultVO searchVO) throws Exception{ + return list("QustnrRespondManage.selectQustnrRespondManage", searchVO); + } + + /** + * 응답자정보를(을) 상세조회 한다. + * @param qustnrRespondManageVO - 응답자정보 정보 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrRespondManageDetail(QustnrRespondManageVO qustnrRespondManageVO) throws Exception{ + return list("QustnrRespondManage.selectQustnrRespondManageDetail", qustnrRespondManageVO); + } + + /** + * 응답자정보를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrRespondManageListCnt(ComDefaultVO searchVO) throws Exception{ + return (Integer)select("QustnrRespondManage.selectQustnrRespondManageCnt", searchVO); + } + + /** + * 응답자정보를(을) 등록한다. + * @param qqustnrRespondManageVO - 응답자정보 정보 담김 VO + * @throws Exception + */ + public void insertQustnrRespondManage(QustnrRespondManageVO qustnrRespondManageVO) throws Exception{ + insert("QustnrRespondManage.insertQustnrRespondManage", qustnrRespondManageVO); + } + + /** + * 응답자정보를(을) 수정한다. + * @param qustnrRespondManageVO - 응답자정보 정보 담김 VO + * @throws Exception + */ + public void updateQustnrRespondManage(QustnrRespondManageVO qustnrRespondManageVO) throws Exception{ + insert("QustnrRespondManage.updateQustnrRespondManage", qustnrRespondManageVO); + } + + /** + * 응답자정보를(을) 삭제한다. + * @param qustnrRespondManageVO - 응답자정보 정보 담김 VO + * @throws Exception + */ + public void deleteQustnrRespondManage(QustnrRespondManageVO qustnrRespondManageVO) throws Exception{ + insert("QustnrRespondManage.deleteQustnrRespondManage", qustnrRespondManageVO); + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qrm/web/EgovQustnrRespondManageController.java b/src/main/java/egovframework/com/uss/olp/qrm/web/EgovQustnrRespondManageController.java new file mode 100644 index 0000000..38cf23b --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qrm/web/EgovQustnrRespondManageController.java @@ -0,0 +1,280 @@ +package egovframework.com.uss.olp.qrm.web; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.EgovMessageSource; +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.annotation.IncludedInfo; +import egovframework.com.cmm.service.EgovCmmUseService; +import egovframework.com.cmm.util.EgovUserDetailsHelper; +import egovframework.com.uss.olp.qrm.service.EgovQustnrRespondManageService; +import egovframework.com.uss.olp.qrm.service.QustnrRespondManageVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springmodules.validation.commons.DefaultBeanValidator; +/** + * 설문응답자관리 Controller Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *   2011.8.26	정진오			IncludedInfo annotation 추가
    + *
    + * 
    + */ + +@Controller +public class EgovQustnrRespondManageController { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovQustnrRespondManageController.class); + + @Autowired + private DefaultBeanValidator beanValidator; + + /** EgovMessageSource */ + @Resource(name="egovMessageSource") + EgovMessageSource egovMessageSource; + + @Resource(name = "egovQustnrRespondManageService") + private EgovQustnrRespondManageService egovQustnrRespondManageService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + @Resource(name="EgovCmmUseService") + private EgovCmmUseService cmmUseService; + + /** + * 응답자정보 목록을 조회한다. + * @param searchVO + * @param commandMap + * @param qustnrRespondManageVO + * @param model + * @return "egovframework/com/uss/olp/qrm/EgovQustnrRespondManageList" + * @throws Exception + */ + @IncludedInfo(name="응답자관리", order = 620 ,gid = 50) + @RequestMapping(value="/_mngr_/qrm/EgovQustnrRespondManageList.do") + public String egovQustnrRespondManageList(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + QustnrRespondManageVO qustnrRespondManageVO, ModelMap model) throws Exception { + + String sSearchMode = commandMap.get("searchMode") == null ? "" : (String)commandMap.get("searchMode"); + + //설문지정보에서 넘어오면 자동검색 설정 + if(sSearchMode.equals("Y")){ +// searchVO.setSearchCondition("QESTNR_ID"); + searchVO.setSearchKeyword0(qustnrRespondManageVO.getQestnrId()); + } + + /** EgovPropertyService.sample */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("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()); + + List sampleList = egovQustnrRespondManageService.selectQustnrRespondManageList(searchVO); + model.addAttribute("resultList", sampleList); + + model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); + model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); + + int totCnt = egovQustnrRespondManageService.selectQustnrRespondManageListCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "egovframework/com/uss/olp/qrm/EgovQustnrRespondManageList"; + } + + /** + * 응답자정보 목록을 상세조회 조회한다. + * @param searchVO + * @param qustnrRespondManageVO + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/qrm/EgovQustnrRespondManageDetail" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qrm/EgovQustnrRespondManageDetail.do") + public String egovQustnrRespondManageDetail(@ModelAttribute("searchVO") ComDefaultVO searchVO, QustnrRespondManageVO qustnrRespondManageVO, + @RequestParam Map commandMap, ModelMap model) throws Exception { + + String sLocationUrl = "egovframework/com/uss/olp/qrm/EgovQustnrRespondManageDetail"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + + if(sCmd.equals("del")){ + + egovQustnrRespondManageService.deleteQustnrRespondManage(qustnrRespondManageVO); + sLocationUrl = "redirect:/_mngr_/qrm/EgovQustnrRespondManageList.do"; + + } else { + + //성별코드조회 + ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); + voComCode.setCodeId("COM014"); + List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode014", listComCode); + + //직업코드조회 + voComCode.setCodeId("COM034"); + listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode034", listComCode); + + List sampleList = egovQustnrRespondManageService.selectQustnrRespondManageDetail(qustnrRespondManageVO); + model.addAttribute("resultList", sampleList); + } + + return sLocationUrl; + } + + /** + * 응답자정보를 수정한다. + * @param searchVO + * @param commandMap + * @param qustnrRespondManageVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/qrm/EgovQustnrRespondManageModify" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qrm/EgovQustnrRespondManageModify.do") + public String qustnrRespondManageModify(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + @ModelAttribute("qustnrRespondManageVO") QustnrRespondManageVO qustnrRespondManageVO, BindingResult bindingResult, ModelMap model) throws Exception { + + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + + String sLocationUrl = "egovframework/com/uss/olp/qrm/EgovQustnrRespondManageModify"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + + //성별코드조회 + ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); + voComCode.setCodeId("COM014"); + List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode014", listComCode); + + //직업코드조회 + voComCode.setCodeId("COM034"); + listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode034", listComCode); + + if(sCmd.equals("save")){ + //서버 validate 체크 + beanValidator.validate(qustnrRespondManageVO, bindingResult); + if(bindingResult.hasErrors()){ + + return sLocationUrl; + } + //아이디 설정 + qustnrRespondManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrRespondManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrRespondManageService.updateQustnrRespondManage(qustnrRespondManageVO); + sLocationUrl = "redirect:/_mngr_/qrm/EgovQustnrRespondManageList.do"; + + } else { + + List sampleList = egovQustnrRespondManageService.selectQustnrRespondManageDetail(qustnrRespondManageVO); + model.addAttribute("resultList", sampleList); + } + + return sLocationUrl; + } + + /** + * 응답자정보를 등록한다. + * @param searchVO + * @param commandMap + * @param qustnrRespondManageVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/qrm/EgovQustnrRespondManageRegist" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qrm/EgovQustnrRespondManageRegist.do") + public String qustnrRespondManageRegist(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + @ModelAttribute("qustnrRespondManageVO") QustnrRespondManageVO qustnrRespondManageVO, BindingResult bindingResult, ModelMap model) throws Exception { + + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + + String sLocationUrl = "egovframework/com/uss/olp/qrm/EgovQustnrRespondManageRegist"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + LOGGER.info("cmd => {}", sCmd); + + //성별코드조회 + ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); + voComCode.setCodeId("COM014"); + List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode014", listComCode); + + //직업코드조회 + voComCode.setCodeId("COM034"); + listComCode = cmmUseService.selectCmmCodeDetail(voComCode); + model.addAttribute("comCode034", listComCode); + + if(sCmd.equals("save")){ + //서버 validate 체크 + beanValidator.validate(qustnrRespondManageVO, bindingResult); + if(bindingResult.hasErrors()){ + return sLocationUrl; + } + //아이디 설정 + qustnrRespondManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrRespondManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + egovQustnrRespondManageService.insertQustnrRespondManage(qustnrRespondManageVO); + sLocationUrl = "redirect:/_mngr_/qrm/EgovQustnrRespondManageList.do"; + } + + return sLocationUrl; + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qtm/service/EgovQustnrTmplatManageService.java b/src/main/java/egovframework/com/uss/olp/qtm/service/EgovQustnrTmplatManageService.java new file mode 100644 index 0000000..eeedcbc --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qtm/service/EgovQustnrTmplatManageService.java @@ -0,0 +1,79 @@ +package egovframework.com.uss.olp.qtm.service; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultVO; +/** + * 설문템플릿 Service Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +public interface EgovQustnrTmplatManageService { + + /** + * 템플릿파일명을 조회한다. + * @param qustnrTmplatManageVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public Map selectQustnrTmplatManageTmplatImagepathnm(QustnrTmplatManageVO qustnrTmplatManageVO) throws Exception; + + /** + * 설문템플릿 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrTmplatManageList(ComDefaultVO searchVO) throws Exception; + + /** + * 설문템플릿를(을) 상세조회 한다. + * @param QustnrTmplatManage - 회정정보가 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrTmplatManageDetail(QustnrTmplatManageVO qustnrTmplatManageVO) throws Exception; + + /** + * 설문템플릿를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrTmplatManageListCnt(ComDefaultVO searchVO) throws Exception; + + /** + * 설문템플릿를(을) 등록한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + void insertQustnrTmplatManage(QustnrTmplatManageVO qustnrTmplatManageVO) throws Exception; + + /** + * 설문템플릿를(을) 수정한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + void updateQustnrTmplatManage(QustnrTmplatManageVO qustnrTmplatManageVO) throws Exception; + + /** + * 설문템플릿를(을) 삭제한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + void deleteQustnrTmplatManage(QustnrTmplatManageVO qustnrTmplatManageVO) throws Exception; + + +} diff --git a/src/main/java/egovframework/com/uss/olp/qtm/service/QustnrTmplatManageVO.java b/src/main/java/egovframework/com/uss/olp/qtm/service/QustnrTmplatManageVO.java new file mode 100644 index 0000000..eae24b0 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qtm/service/QustnrTmplatManageVO.java @@ -0,0 +1,229 @@ +package egovframework.com.uss.olp.qtm.service; + +import java.io.Serializable; +/** + * 설문템플릿 VO Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +public class QustnrTmplatManageVO implements Serializable { + + private static final long serialVersionUID = 4589288390515705950L; + + /** 설문템플릿 아이디 */ + private String qestnrTmplatId = ""; + + /** 설문템플릿 유형 */ + private String qestnrTmplatTy = ""; + + /** 설문템플 이미지내용 */ + private byte[] qestnrTmplatImagepathnm; + + /** 설문템플릿 설명 */ + private String qestnrTmplatCn = ""; + + /** 설문템플릿경로명 */ + private String qestnrTmplatCours; + + /** 최초등록시점 */ + private String frstRegisterPnttm = ""; + + /** 최초등록자아이디 */ + private String frstRegisterId = ""; + + /** 최종수정자 시점 */ + private String lastUpdusrPnttm = ""; + + /** 최종수정자아이디 */ + private String lastUpdusrId = ""; + + /** 화면 명령 처리 */ + private String cmd = ""; + + /** + * qestnrTmplatId attribute 를 리턴한다. + * @return the String + */ + public String getQestnrTmplatId() { + return qestnrTmplatId; + } + + /** + * qestnrTmplatId attribute 값을 설정한다. + * @return qestnrTmplatId String + */ + public void setQestnrTmplatId(String qestnrTmplatId) { + this.qestnrTmplatId = qestnrTmplatId; + } + + /** + * qestnrTmplatTy attribute 를 리턴한다. + * @return the String + */ + public String getQestnrTmplatTy() { + return qestnrTmplatTy; + } + + /** + * qestnrTmplatTy attribute 값을 설정한다. + * @return qestnrTmplatTy String + */ + public void setQestnrTmplatTy(String qestnrTmplatTy) { + this.qestnrTmplatTy = qestnrTmplatTy; + } + + /** + * qestnrTmplatImagepathnm attribute 를 리턴한다. + * @return the byte[] + */ + public byte[] getQestnrTmplatImagepathnm() { + byte[] ret = null; + + if (qestnrTmplatImagepathnm != null) { + ret = new byte[qestnrTmplatImagepathnm.length]; + + for (int i = 0; i < qestnrTmplatImagepathnm.length; i++) { + ret[i] = qestnrTmplatImagepathnm[i]; + } + } + return ret; + } + + /** + * qestnrTmplatImagepathnm attribute 값을 설정한다. + * @return qestnrTmplatImagepathnm byte[] + */ + public void setQestnrTmplatImagepathnm(byte[] qestnrTmplatImagepathnm) { + this.qestnrTmplatImagepathnm = new byte[qestnrTmplatImagepathnm.length]; + + for (int i = 0; i < qestnrTmplatImagepathnm.length; ++i) { + this.qestnrTmplatImagepathnm[i] = qestnrTmplatImagepathnm[i]; + } + } + + /** + * qestnrTmplatCn attribute 를 리턴한다. + * @return the String + */ + public String getQestnrTmplatCn() { + return qestnrTmplatCn; + } + + /** + * qestnrTmplatCn attribute 값을 설정한다. + * @return qestnrTmplatCn String + */ + public void setQestnrTmplatCn(String qestnrTmplatCn) { + this.qestnrTmplatCn = qestnrTmplatCn; + } + + /** + * qestnrTmplatCours attribute 를 리턴한다. + * @return the String + */ + public String getQestnrTmplatCours() { + return qestnrTmplatCours; + } + + /** + * qestnrTmplatCours attribute 값을 설정한다. + * @return qestnrTmplatCours String + */ + public void setQestnrTmplatCours(String qestnrTmplatCours) { + this.qestnrTmplatCours = qestnrTmplatCours; + } + + /** + * frstRegisterPnttm attribute 를 리턴한다. + * @return the String + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * frstRegisterPnttm attribute 값을 설정한다. + * @return frstRegisterPnttm String + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } + + /** + * frstRegisterId attribute 를 리턴한다. + * @return the String + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * @return frstRegisterId String + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * lastUpdusrPnttm attribute 를 리턴한다. + * @return the String + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * lastUpdusrPnttm attribute 값을 설정한다. + * @return lastUpdusrPnttm String + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * lastUpdusrId attribute 를 리턴한다. + * @return the String + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * @return lastUpdusrId String + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + /** + * cmd attribute 를 리턴한다. + * @return the String + */ + public String getCmd() { + return cmd; + } + + /** + * cmd attribute 값을 설정한다. + * @return cmd String + */ + public void setCmd(String cmd) { + this.cmd = cmd; + } + + + +} diff --git a/src/main/java/egovframework/com/uss/olp/qtm/service/impl/EgovQustnrTmplatManageServiceImpl.java b/src/main/java/egovframework/com/uss/olp/qtm/service/impl/EgovQustnrTmplatManageServiceImpl.java new file mode 100644 index 0000000..02c4f78 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qtm/service/impl/EgovQustnrTmplatManageServiceImpl.java @@ -0,0 +1,120 @@ +package egovframework.com.uss.olp.qtm.service.impl; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.uss.olp.qtm.service.EgovQustnrTmplatManageService; +import egovframework.com.uss.olp.qtm.service.QustnrTmplatManageVO; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; +/** + * 설문템플릿 ServiceImpl Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +@Service("egovQustnrTmplatManageService") +public class EgovQustnrTmplatManageServiceImpl extends EgovAbstractServiceImpl implements EgovQustnrTmplatManageService{ + + //final private Log log = LogFactory.getLog(this.getClass()); + + @Resource(name="qustnrTmplatManageDao") + private QustnrTmplatManageDao dao; + + @Resource(name="egovQustnrTmplatManageIdGnrService") + private EgovIdGnrService idgenService; + + /** + * 템플릿파일명을 조회한다. + * @param qustnrTmplatManageVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + @Override + public Map selectQustnrTmplatManageTmplatImagepathnm(QustnrTmplatManageVO qustnrTmplatManageVO) throws Exception{ + return dao.selectQustnrTmplatManageTmplatImagepathnm(qustnrTmplatManageVO); + } + + /** + * 설문템플릿 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrTmplatManageList(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrTmplatManageList(searchVO); + } + + /** + * 설문템플릿를(을) 상세조회 한다. + * @param QustnrTmplatManage - 회정정보가 담김 VO + * @return List + * @throws Exception + */ + @Override + public List selectQustnrTmplatManageDetail(QustnrTmplatManageVO qustnrTmplatManageVO) throws Exception{ + return dao.selectQustnrTmplatManageDetail(qustnrTmplatManageVO); + } + + /** + * 설문템플릿를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + @Override + public int selectQustnrTmplatManageListCnt(ComDefaultVO searchVO) throws Exception{ + return dao.selectQustnrTmplatManageListCnt(searchVO); + } + + /** + * 설문템플릿를(을) 등록한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void insertQustnrTmplatManage(QustnrTmplatManageVO qustnrTmplatManageVO) throws Exception { + String sMakeId = idgenService.getNextStringId(); + + qustnrTmplatManageVO.setQestnrTmplatId(sMakeId); + + dao.insertQustnrTmplatManage(qustnrTmplatManageVO); + } + + /** + * 설문템플릿를(을) 수정한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void updateQustnrTmplatManage(QustnrTmplatManageVO qustnrTmplatManageVO){ + dao.updateQustnrTmplatManage(qustnrTmplatManageVO); + } + + /** + * 설문템플릿를(을) 삭제한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + @Override + public void deleteQustnrTmplatManage(QustnrTmplatManageVO qustnrTmplatManageVO){ + dao.deleteQustnrTmplatManage(qustnrTmplatManageVO); + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qtm/service/impl/QustnrTmplatManageDao.java b/src/main/java/egovframework/com/uss/olp/qtm/service/impl/QustnrTmplatManageDao.java new file mode 100644 index 0000000..584a76e --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qtm/service/impl/QustnrTmplatManageDao.java @@ -0,0 +1,109 @@ +package egovframework.com.uss.olp.qtm.service.impl; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; +import egovframework.com.uss.olp.qtm.service.QustnrTmplatManageVO; + +import org.springframework.stereotype.Repository; +/** + * 설문템플릿 Dao Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *
    + * 
    + */ +@Repository("qustnrTmplatManageDao") +public class QustnrTmplatManageDao extends EgovComAbstractDAO { + + /** + * 템플릿파일명을 조회한다. + * @param qustnrTmplatManageVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public Map selectQustnrTmplatManageTmplatImagepathnm(QustnrTmplatManageVO qustnrTmplatManageVO){ + return (Map)select("QustnrTmplatManage.selectQustnrTmplatManageTmplatImagepathnm", qustnrTmplatManageVO); + } + + + /** + * 설문템플릿 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return List + * @throws Exception + */ + public List selectQustnrTmplatManageList(ComDefaultVO searchVO){ + return list("QustnrTmplatManage.selectQustnrTmplatManage", searchVO); + } + + /** + * 설문템플릿를(을) 상세조회 한다. + * @param QustnrTmplatManage - 회정정보가 담김 VO + * @return List + * @throws Exception + */ + public List selectQustnrTmplatManageDetail(QustnrTmplatManageVO qustnrTmplatManageVO){ + return list("QustnrTmplatManage.selectQustnrTmplatManageDetail", qustnrTmplatManageVO); + } + + /** + * 설문템플릿를(을) 목록 전체 건수를(을) 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return int + * @throws Exception + */ + public int selectQustnrTmplatManageListCnt(ComDefaultVO searchVO){ + return (Integer)select("QustnrTmplatManage.selectQustnrTmplatManageCnt", searchVO); + } + + /** + * 설문템플릿를(을) 등록한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + public void insertQustnrTmplatManage(QustnrTmplatManageVO qustnrTmplatManageVO){ + insert("QustnrTmplatManage.insertQustnrTmplatManage", qustnrTmplatManageVO); + } + + /** + * 설문템플릿를(을) 수정한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + public void updateQustnrTmplatManage(QustnrTmplatManageVO qustnrTmplatManageVO){ + update("QustnrTmplatManage.updateQustnrTmplatManage", qustnrTmplatManageVO); + } + + /** + * 설문템플릿를(을) 삭제한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @throws Exception + */ + public void deleteQustnrTmplatManage(QustnrTmplatManageVO qustnrTmplatManageVO){ + //설문응답자 삭제 + delete("QustnrTmplatManage.deleteQustnrRespondManage", qustnrTmplatManageVO); + //설문조사(설문결과) 삭제 + delete("QustnrTmplatManage.deleteQustnrRespondInfo", qustnrTmplatManageVO); + //설문항목 삭제 + delete("QustnrTmplatManage.deleteQustnrItemManage", qustnrTmplatManageVO); + //설문문항 삭제 + delete("QustnrTmplatManage.deleteQustnrQestnManage", qustnrTmplatManageVO); + //설문관리 삭제 + delete("QustnrTmplatManage.deleteQustnrManage", qustnrTmplatManageVO); + + //설문템플릿삭제 + delete("QustnrTmplatManage.deleteQustnrTmplatManage", qustnrTmplatManageVO); + } +} diff --git a/src/main/java/egovframework/com/uss/olp/qtm/web/EgovQustnrTmplatManageController.java b/src/main/java/egovframework/com/uss/olp/qtm/web/EgovQustnrTmplatManageController.java new file mode 100644 index 0000000..1419759 --- /dev/null +++ b/src/main/java/egovframework/com/uss/olp/qtm/web/EgovQustnrTmplatManageController.java @@ -0,0 +1,373 @@ +package egovframework.com.uss.olp.qtm.web; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.EgovMessageSource; +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.annotation.IncludedInfo; +import egovframework.com.cmm.util.EgovUserDetailsHelper; +import egovframework.com.uss.olp.qtm.service.EgovQustnrTmplatManageService; +import egovframework.com.uss.olp.qtm.service.QustnrTmplatManageVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +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.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springmodules.validation.commons.DefaultBeanValidator; +/** + * 설문템플릿 Controller Class 구현 + * @author 공통서비스 장동한 + * @since 2009.03.20 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.20  장동한          최초 생성
    + *   2011.8.26	정진오			IncludedInfo annotation 추가
    + *
    + * 
    + */ + +@Controller +public class EgovQustnrTmplatManageController { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovQustnrTmplatManageController.class); + + @Autowired + private DefaultBeanValidator beanValidator; + + /** EgovMessageSource */ + @Resource(name="egovMessageSource") + EgovMessageSource egovMessageSource; + + @Resource(name = "egovQustnrTmplatManageService") + private EgovQustnrTmplatManageService egovQustnrTmplatManageService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + +// @RequestMapping(value="/_mngr_/qtm/EgovQustnrTmplatManageMain.do") +// public String egovQustnrTmplatManageMain(ModelMap model) throws Exception { +// return "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageMain"; +// } + +// @RequestMapping(value="/_mngr_/qtm/EgovQustnrTmplatManageLeft.do") +// public String egovQustnrTmplatManageLeft(ModelMap model) throws Exception { +// return "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageLeft"; +// } + + /** + * 개별 배포시 메인메뉴를 조회한다. + * @param model + * @return "/uss/sam/cpy/" + * @throws Exception + */ +// @RequestMapping(value="/_mngr_/EgovMain.do") +// public String egovMain(ModelMap model) throws Exception { +// return "egovframework/com/uss/olp/qtm/EgovMain"; +// } + + /** + * 메뉴를 조회한다. + * @param model + * @return "/uss/sam/cpy/EgovLeft" + * @throws Exception + */ +// @RequestMapping(value="/_mngr_/EgovLeft.do") +// public String egovLeft(ModelMap model) throws Exception { +// return "egovframework/com/uss/olp/qtm/EgovLeft"; +// } + + /** + * 설문템플릿 목록을 조회한다. + * @param searchVO + * @param commandMap + * @param qustnrTmplatManageVO + * @param model + * @return "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageList" + * @throws Exception + */ + @IncludedInfo(name="설문템플릿관리", order = 610 ,gid = 50) + @RequestMapping(value="/_mngr_/qtm/EgovQustnrTmplatManageList.do") + public String egovQustnrTmplatManageList(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, QustnrTmplatManageVO qustnrTmplatManageVO, + ModelMap model) throws Exception { + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + + if(sCmd.equals("del")){ + egovQustnrTmplatManageService.deleteQustnrTmplatManage(qustnrTmplatManageVO); + } + + /** EgovPropertyService.sample */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("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()); + + List sampleList = egovQustnrTmplatManageService.selectQustnrTmplatManageList(searchVO); + model.addAttribute("resultList", sampleList); + + model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); + model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); + + int totCnt = egovQustnrTmplatManageService.selectQustnrTmplatManageListCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageList"; + } + + /** + * 설문템플릿 이미지 목록을 상세조회 조회한다. + * @param request + * @param response + * @param qustnrTmplatManageVO + * @param commandMap + * @return "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageImg" + * @throws Exception + */ + @SuppressWarnings("unused") + @RequestMapping(value="/_mngr_/qtm/EgovQustnrTmplatManageImg.do") + public void egovQustnrTmplatManageImg(HttpServletRequest request, HttpServletResponse response, QustnrTmplatManageVO qustnrTmplatManageVO, + @RequestParam Map commandMap)throws Exception { + + Map mapResult = egovQustnrTmplatManageService.selectQustnrTmplatManageTmplatImagepathnm(qustnrTmplatManageVO); + + byte[] img = (byte[])mapResult.get("QUSTNR_TMPLAT_IMAGE_INFOPATHNM"); + + String imgtype = "jpeg"; + String type = ""; + + if(imgtype != null && !"".equals(imgtype)){ + type="image/"+imgtype; + } + + response.setHeader("Content-Type", imgtype); + response.setHeader ("Content-Length", "" + img.length); + response.getOutputStream().write(img); + response.getOutputStream().flush(); + response.getOutputStream().close(); + } + + /** + * 설문템플릿 목록을 상세조회 조회한다. + * @param searchVO + * @param qustnrTmplatManageVO + * @param commandMap + * @param model + * @return "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageDetail" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qtm/EgovQustnrTmplatManageDetail.do") + public String egovQustnrTmplatManageDetail(@ModelAttribute("searchVO") ComDefaultVO searchVO, QustnrTmplatManageVO qustnrTmplatManageVO, + @RequestParam Map commandMap, ModelMap model) throws Exception { + + String sLocationUrl = "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageDetail"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + + if(sCmd.equals("del")){ + egovQustnrTmplatManageService.deleteQustnrTmplatManage(qustnrTmplatManageVO); + return CommUtil.doCompleteUrl(model, "성공", "삭제 되었습니다.", "/_mngr_/qtm/EgovQustnrTmplatManageList.do"); + }else{ + List sampleList = egovQustnrTmplatManageService.selectQustnrTmplatManageDetail(qustnrTmplatManageVO); + model.addAttribute("resultList", sampleList); + } + + return sLocationUrl; + } + + /** + * 설문템플릿를 수정한다. + * @param searchVO + * @param commandMap + * @param qustnrTmplatManageVO + * @param model + * @return "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageModify" + * @throws Exception + */ + @SuppressWarnings("unused") + @RequestMapping(value="/_mngr_/qtm/EgovQustnrTmplatManageModify.do") + public String qustnrTmplatManageModify(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, QustnrTmplatManageVO qustnrTmplatManageVO, + ModelMap model) throws Exception { + + String sLocationUrl = "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageModify"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + + List sampleList = egovQustnrTmplatManageService.selectQustnrTmplatManageDetail(qustnrTmplatManageVO); + model.addAttribute("resultList", sampleList); + + return sLocationUrl; + } + + /** + * 설문템플릿를 수정처리 한다. + * @param multiRequest + * @param searchVO + * @param commandMap + * @param qustnrTmplatManageVO + * @param bindingResult + * @param model + * @return "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageModifyActor" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qtm/EgovQustnrTmplatManageModifyActor.do") + public String qustnrTmplatManageModifyActor(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + @ModelAttribute("qustnrTmplatManageVO") QustnrTmplatManageVO qustnrTmplatManageVO, BindingResult bindingResult, ModelMap model) throws Exception { + + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + + //서버 validate 체크 + beanValidator.validate(qustnrTmplatManageVO, bindingResult); + if (bindingResult.hasErrors()){ + List sampleList = egovQustnrTmplatManageService.selectQustnrTmplatManageDetail(qustnrTmplatManageVO); + model.addAttribute("resultList", sampleList); + return "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageModify"; + } + + //아이디 설정 +// qustnrTmplatManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrTmplatManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + final Map files = multiRequest.getFileMap(); + + if (!files.isEmpty()) { + for(MultipartFile file : files.values()){ + LOGGER.info("getName => {}", file.getName() ); + LOGGER.info("getOriginalFilename => {}", file.getOriginalFilename() ); + + // 파일 수정여부 확인 + if(file.getOriginalFilename() != "") { + if(file.getName().equals("qestnrTmplatImage")){ + qustnrTmplatManageVO.setQestnrTmplatImagepathnm( file.getBytes() ); + } + } + } + } + + egovQustnrTmplatManageService.updateQustnrTmplatManage(qustnrTmplatManageVO); + model.addAttribute("qustnrTmplatManageVO", qustnrTmplatManageVO); +// return "redirect:/_mngr_/qtm/EgovQustnrTmplatManageList.do"; + return CommUtil.doCompleteUrl(model, "성공", "수정 되었습니다.", "/_mngr_/qtm/EgovQustnrTmplatManageDetail.do"); + } + + /** + * 설문템플릿를 등록한다. / 초기등록페이지 + * @param searchVO + * @param commandMap + * @param qustnrTmplatManageVO + * @param model + * @return "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageRegist" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qtm/EgovQustnrTmplatManageRegist.do") + public String qustnrTmplatManageRegist(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, + @ModelAttribute("qustnrTmplatManageVO") QustnrTmplatManageVO qustnrTmplatManageVO, ModelMap model) throws Exception { + + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + + String sLocationUrl = "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageRegist"; + + String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); + LOGGER.info("cmd => {}", sCmd); + + //아이디 설정 + qustnrTmplatManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrTmplatManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + return sLocationUrl; + } + + /** + * 설문템플릿를 등록 처리 한다. / 등록처리 + * @param multiRequest + * @param searchVO + * @param qustnrTmplatManageVO + * @param model + * @return "egovframework/com/uss/olp/qtm/EgovQustnrTmplatManageRegistActor" + * @throws Exception + */ + @RequestMapping(value="/_mngr_/qtm/EgovQustnrTmplatManageRegistActor.do") + public String qustnrTmplatManageRegistActor(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") ComDefaultVO searchVO, + QustnrTmplatManageVO qustnrTmplatManageVO, ModelMap model) throws Exception { + + // 0. Spring Security 사용자권한 처리 +// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); +// if(!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "egovframework/com/uat/uia/EgovLoginUsr"; +// } + + //로그인 객체 선언 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + + //아이디 설정 + qustnrTmplatManageVO.setFrstRegisterId(CommUtil.getMngrMemId()); + qustnrTmplatManageVO.setLastUpdusrId(CommUtil.getMngrMemId()); + + final Map files = multiRequest.getFileMap(); + + if (!files.isEmpty()) { + for(MultipartFile file : files.values()){ + LOGGER.info("getName => {}", file.getName() ); + LOGGER.info("getOriginalFilename => {}", file.getOriginalFilename() ); + if(file.getName().equals("qestnrTmplatImage")){ + qustnrTmplatManageVO.setQestnrTmplatImagepathnm( file.getBytes() ); + } + } + } + + //log.info("qestnrTmplatImagepathnm =>" + qustnrTmplatManageVO.getQestnrTmplatImagepathnm() ); + + egovQustnrTmplatManageService.insertQustnrTmplatManage(qustnrTmplatManageVO); + +// return "redirect:/_mngr_/qtm/EgovQustnrTmplatManageList.do"; + return CommUtil.doCompleteUrl(model, "성공", "저장 되었습니다.", "/_mngr_/qtm/EgovQustnrTmplatManageList.do"); + } +} diff --git a/src/main/java/egovframework/com/utl/fcc/service/EgovDateFormat.java b/src/main/java/egovframework/com/utl/fcc/service/EgovDateFormat.java new file mode 100644 index 0000000..53c9428 --- /dev/null +++ b/src/main/java/egovframework/com/utl/fcc/service/EgovDateFormat.java @@ -0,0 +1,146 @@ +package egovframework.com.utl.fcc.service; + +import java.text.DateFormat; +import java.util.Date; +import java.util.Locale; + +/** + * 날짜 및 시간에 대한 변환을 수행하는 클래스 + */ +public class EgovDateFormat { + + /** + * 기본 Locale에 해당하는 형식으로 날짜를 변환한다. + * + * @param date 날짜 + * @return 날짜 문자열 + */ + public static String formatDate(Date date) { + return DateFormat.getDateInstance().format(date); + } + + /** + * Locale에 해당하는 형식으로 날짜를 변환한다. + * + * @param locale 로케일 + * @param date 날짜 + * @return 날짜 문자열 + */ + public static String formatDate(Locale locale, Date date) { + return DateFormat.getDateInstance(DateFormat.DEFAULT, locale).format(date); + } + + /** + * 주어진 스타일에 따라, 기본 Locale에 해당하는 형식으로 날짜를 변환한다. + * + * @param style 날짜 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT}) + * @param date 날짜 + * @return 날짜 문자열 + */ + public static String formatDate(int style, Date date) { + return DateFormat.getDateInstance(style).format(date); + } + + /** + * 주어진 스타일에 따라, Locale에 해당하는 형식으로 날짜를 변환한다. + * + * @param style 날짜 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT}) + * @param locale 로케일 + * @param date 날짜 + * @return 날짜 문자열 + */ + public static String formatDate(int style, Locale locale, Date date) { + return DateFormat.getDateInstance(style, locale).format(date); + } + + /** + * 기본 Locale에 해당하는 형식으로 날짜 및 시간을 변환한다. + * + * @param date 날짜 및 시간 + * @return 날짜 및 시간 문자열 + */ + public static String formatDateTime(Date date) { + return DateFormat.getDateTimeInstance().format(date); + } + + /** + * Locale에 해당하는 형식으로 날짜 및 시간을 변환한다. + * + * @param locale 로케일 + * @param date 날짜 및 시간 + * @return 날짜 및 시간 문자열 + */ + public static String formatDateTime(Locale locale, Date date) { + return DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, locale).format(date); + } + + /** + * 주어진 스타일에 따라, 기본 Locale에 해당하는 형식으로 날짜 및 시간을 변환한다. + * + * @param dateStyle 날짜 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT}) + * @param timeStyle 시간 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT}) + * @param date 날짜 및 시간 + * @return 날짜 및 시간 문자열 + */ + public static String formatDateTime(int dateStyle, int timeStyle, Date date) { + return DateFormat.getDateTimeInstance(dateStyle, timeStyle).format(date); + } + + /** + * 주어진 스타일에 따라, Locale에 해당하는 형식으로 날짜 및 시간을 변환한다. + * + * @param dateStyle 날짜 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT}) + * @param timeStyle 시간 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT}) + * @param locale 로케일 + * @param date 날짜 및 시간 + * @return 날짜 및 시간 문자열 + */ + public static String formatDateTime(int dateStyle, int timeStyle, Locale locale, Date date) { + return DateFormat.getDateTimeInstance(dateStyle, timeStyle, locale).format(date); + } + + /** + * 기본 Locale에 해당하는 형식으로 시간을 변환한다. + * + * @param date 시간 + * @return 시간 문자열 + */ + public static String formatTime(Date date) { + return DateFormat.getTimeInstance().format(date); + } + + /** + * Locale에 해당하는 형식으로 시간을 변환한다. + * + * @param locale 로케일 + * @param date 시간 + * @return 시간 문자열 + */ + public static String formatTime(Locale locale, Date date) { + return DateFormat.getTimeInstance(DateFormat.DEFAULT, locale).format(date); + } + + /** + * 주어진 스타일에 따라, 기본 Locale에 해당하는 형식으로 시간을 변환한다. + * + * @param style 시간 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT}) + * @param date 시간 + * @return 시간 문자열 + */ + public static String formatTime(int style, Date date) { + return DateFormat.getTimeInstance(style).format(date); + } + + /** + * 주어진 스타일에 따라, Locale에 해당하는 형식으로 시간을 변환한다. + * + * @param style 시간 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT}) + * @param locale 로케일 + * @param date 시간 + * @return 시간 문자열 + */ + public static String formatTime(int style, Locale locale, Date date) { + return DateFormat.getTimeInstance(style, locale).format(date); + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/utl/fcc/service/EgovDateUtil.java b/src/main/java/egovframework/com/utl/fcc/service/EgovDateUtil.java new file mode 100644 index 0000000..91c5857 --- /dev/null +++ b/src/main/java/egovframework/com/utl/fcc/service/EgovDateUtil.java @@ -0,0 +1,865 @@ +package egovframework.com.utl.fcc.service; + +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 com.ibm.icu.util.ChineseCalendar; + +/** + * + * Date 에 대한 Util 클래스 + * @author 공통서비스 개발팀 이중호 + * @since 2009.02.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.02.01  이중호          최초 생성
    + *
    + * 
    + */ +public class EgovDateUtil { + + /** + *

    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); + } + + if (date1 != null && date2 != null) { + int days1 = (int) ((date1.getTime() / 3600000) / 24); + int days2 = (int) ((date2.getTime() / 3600000) / 24); + return days2 - days1; + } else { + return 0; + } + + } + + /** + *

    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 fromFormat = ""; + String toFormat = ""; + + if (EgovStringUtil.isNullToString(strSource).trim().equals("")) { + return ""; + } + if (EgovStringUtil.isNullToString(fromDateFormat).trim().equals("")) + fromFormat = "yyyyMMddHHmmss"; // default값 + if (EgovStringUtil.isNullToString(toDateFormat).trim().equals("")) + toFormat = "yyyy-MM-dd HH:mm:ss"; // default값 + + try { + simpledateformat = new SimpleDateFormat(fromFormat, Locale.getDefault()); + date = simpledateformat.parse(strSource); + if (!EgovStringUtil.isNullToString(strTimeZone).trim().equals("")) { + simpledateformat.setTimeZone(TimeZone.getTimeZone(strTimeZone)); + } + simpledateformat = new SimpleDateFormat(toFormat, Locale.getDefault()); + } catch (ParseException exception) { + throw new RuntimeException(exception); + } + + return simpledateformat.format(date); + + } + + /** + * 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(); + + r.setSeed(new Date().getTime()); + + 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) { + if (dateStr == null || !(dateStr.trim().length() == 8 || dateStr.trim().length() == 10)) { + throw new IllegalArgumentException("Invalid date format: " + dateStr); + } + + if (dateStr.length() == 10) { + return EgovStringUtil.removeMinusChar(dateStr); + } + + return dateStr; + } + + /** + * 입력된 일자 문자열을 확인하고 8자리로 리턴 + * @param sDate + * @return + */ + public static String validChkTime(String timeStr) { + if (timeStr == null || !(timeStr.trim().length() == 4)) { + throw new IllegalArgumentException("Invalid time format: " + timeStr); + } + + if (timeStr.length() == 5) { + timeStr = EgovStringUtil.remove(timeStr, ':'); + } + + return timeStr; + } + +} diff --git a/src/main/java/egovframework/com/utl/fcc/service/EgovEhgtCalcUtil.java b/src/main/java/egovframework/com/utl/fcc/service/EgovEhgtCalcUtil.java new file mode 100644 index 0000000..7a8aed3 --- /dev/null +++ b/src/main/java/egovframework/com/utl/fcc/service/EgovEhgtCalcUtil.java @@ -0,0 +1,294 @@ +/** + * @Class Name : EgovEhgtCalcUtil.java + * @Description : 대한민국, 미국,유럽연합, 일본, 중국연합 사이의 환율계산기능을 + * 제공하는 Business Interface class + * @Modification Information + * @ + * @ 수정일 수정자 수정내용 + * @ ------- -------- --------------------------- + * @ 2009.01.13 박정규 최초 생성 + * + * @author 공통 서비스 개발팀 박정규 + * @since 2009. 01. 13 + * @version 1.0 + * @see + * + */ + +package egovframework.com.utl.fcc.service; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.math.BigDecimal; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; + +import egovframework.com.cmm.util.EgovResourceCloseHelper; + +import javax.swing.text.html.HTMLEditorKit; +import javax.swing.text.html.parser.ParserDelegator; + +public class EgovEhgtCalcUtil { + + // 환율.... + static final char EGHT_USD = 'U'; // 미국 + static final char EGHT_JPY = 'J'; // 일본 + static final char EGHT_EUR = 'E'; // 유럽연합 + static final char EGHT_CNY = 'C'; // 중국연합 + + static final char EGHT_KWR = 'K'; // 대한민국 + + static StringBuffer sb = new StringBuffer(); + + /** + * 대한민국(KRW), 미국(USD), 유럽연합(EUR), 일본(JPY), 중국원화(CNY) 사이의 환율을 계산하는 기능이다 + * 환율표 - 매매기준율 => 미국(USD) - 1485.00(USD), 일본-100(JPY) - 1596.26(JPY) + * 계산법: 대한민원(KRW) - 1,000원 -> 미국(USD)로 변환 시 => 1,000(원)/1485(매매기준율) = 0.67(URS) + * 계산법: 일본(JPY) - 100,000원 -> 대한민국(KRW) 변환 시 => (100,000(원) * 1596.26(매매기준율)) / 100(100엔당 기준표이므로) = 1,596,260.00 (KRW) + * 계산법: 일본(JPY) - 100,000원 -> 미국(USD) 변환 시 => ( + * (100,000(원) * 1596.26(매매기준율)) / 100(100엔당 기준표이므로) = 1,596,260.00 (KRW)) / 1,485.00 = 1,074.92 (USD) + * @param srcType - 환율기준 + * @param srcAmount - 금액 + * @param cnvrType - 변환환율 + * @return 환율금액 + * @exception MyException + * @see + */ + public void readHtmlParsing(String str) { + HttpURLConnection con = null; + InputStream is = null; + InputStreamReader reader = null; + try { + //입력받은 URL에 연결하여 InputStream을 통해 읽은 후 파싱 한다. + URL url = new URL(str); + + con = (HttpURLConnection) url.openConnection(); + + is = con.getInputStream(); + reader = new InputStreamReader(is, "euc-kr"); + //InputStreamReader reader = new InputStreamReader(con.getInputStream(), "utf-8"); + + new ParserDelegator().parse(reader, new CallbackHandler(), true); + + con.disconnect(); + + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + EgovResourceCloseHelper.close(reader, is); + + if (con != null) { + con.disconnect(); + } + } + } + + //파서는 콜백 형식으로 되어 있다. 각 태그가 들어 올때 적절한 메소드가 호출됨 + private class CallbackHandler extends HTMLEditorKit.ParserCallback { + + public void handleText(char[] data, int pos) { + + String srcStr = new String(data); + + srcStr = EgovStringUtil.strip(srcStr, " "); + + sb.append(srcStr).append("/"); + } + } + + public static String getEhgtCalc(String srcType, long srcAmount, String cnvrType) throws Exception { + + String rtnStr = null; + + String[] eghtStdrRt = null; // Html에서 파싱한 환율매매기준율을 저장하기 위한 문자열배열 + + double srcStdrRt = 0.00; // 원래 매매기준율 + double cnvrStdrRt = 0.00; // 변환 매매기준율 + + //double cnvrAmount = 0.00; // 변환금액 + String sCnvrAmount = null; // 변환금액 + + String srcStr = null; + String cnvrStr = null; + + String srcTypeCnvr = srcType.toUpperCase(); + String cnvrTypeCnvr = cnvrType.toUpperCase(); + + EgovEhgtCalcUtil parser = new EgovEhgtCalcUtil(); + + parser.readHtmlParsing("http://community.fxkeb.com/fxportal/jsp/RS/DEPLOY_EXRATE/4176_0.html"); + + if (sb == null) { + throw new RuntimeException("StringBuffer is null!!"); + } + + eghtStdrRt = EgovStringUtil.split(sb.toString(), "/"); + + if (eghtStdrRt == null || (eghtStdrRt.length == 0)) + throw new RuntimeException("String Split Error!"); + + char srcChr = srcTypeCnvr.charAt(0); + char cnvrChr = cnvrTypeCnvr.charAt(0); + + // 원래 환율기준 정의 + switch (srcChr) { + + case EGHT_USD: // 미국 + srcStr = "USD"; + break; + + case EGHT_JPY: // 일본 + srcStr = "JPY"; + break; + + case EGHT_EUR: // 유럽연합 + srcStr = "EUR"; + break; + + case EGHT_CNY: // 중국연합 + srcStr = "CNY"; + break; + + default: + srcStr = "USD"; + break; + } + + // 변환하고자 하는 환율기준 정의 + switch (cnvrChr) { + + case EGHT_USD: // 미국 + cnvrStr = "USD"; + break; + + case EGHT_JPY: // 일본 + cnvrStr = "JPY"; + break; + + case EGHT_EUR: // 유럽연합 + cnvrStr = "EUR"; + break; + + case EGHT_CNY: // 중국연합 + cnvrStr = "CNY"; + break; + + default: + cnvrStr = "KRW"; + break; + } + + // 변환하고자 하는 국가의 환율매매기준율 추출... + for (int i = 0; i < eghtStdrRt.length; i++) { + + // 원래 매매기준율 추출 + if (eghtStdrRt[i].equals(srcStr)) { + srcStdrRt = Double.parseDouble(eghtStdrRt[i + 1]); + + if (i == (eghtStdrRt.length - 1)) + break; + } + + // 변환 매매기준율 추출 + if (eghtStdrRt[i].equals(cnvrStr)) { + cnvrStdrRt = Double.parseDouble(eghtStdrRt[i + 1]); + + if (i == (eghtStdrRt.length - 1)) + break; + } + } + + // 정확한 계산을 위한 BigDecimal 형태로 구현. + BigDecimal bSrcAmount = new BigDecimal(String.valueOf(srcAmount)); // 변환하고자 하는 금액 + BigDecimal bSrcStdrRt = new BigDecimal(String.valueOf(srcStdrRt)); // 원래 매매 비율 + BigDecimal bCnvrStdrRt = new BigDecimal(String.valueOf(cnvrStdrRt)); // 변환 매매 비율 + BigDecimal bStdr = new BigDecimal("100"); // 변환 매매 비율 + + // 원래 매매기준율 및 변환매매기준율 기준으로 환율금액 계산 + switch (srcChr) { + + case EGHT_KWR: // 대한민국 + if (cnvrChr == 'K') + //변환금액 = 변환대상금액; + sCnvrAmount = bSrcAmount.toString(); + else if (cnvrChr == 'J') + //변환금액 = (변환대상금액 / 변환매매비율) * 100; + sCnvrAmount = (bSrcAmount.divide(bCnvrStdrRt, 4, 4)).multiply(bStdr).setScale(2, 4).toString(); + else + //변환금액 = (변환대상금액 / 변환매매비율); + sCnvrAmount = bSrcAmount.divide(bCnvrStdrRt, 2, 4).toString(); + break; + + case EGHT_USD: // 미국 + if (cnvrChr == 'U') + //변환금액 = 변환대상금액; + sCnvrAmount = bSrcAmount.toString(); + else if (cnvrChr == 'K') + //변환금액 = 변환대상금액 * 원래 매매 비율; + sCnvrAmount = bSrcAmount.multiply(bSrcStdrRt).setScale(2, 4).toString(); + else if (cnvrChr == 'J') + //cnvrAmount = ((변환대상금액 * 원래 매매 비율) / 변환 매매 비율) * 100; + sCnvrAmount = ((bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bCnvrStdrRt, 2, 4)).multiply(bStdr).setScale(2, 4).toString(); + else + //cnvrAmount = (변환대상금액 * 원래 매매 비율) / 변환 매매 비율; + sCnvrAmount = (bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bCnvrStdrRt, 2, 4).toString(); + break; + + case EGHT_EUR: // 유럽연합 + if (cnvrChr == 'E') + //변환금액 = 변환대상금액; + sCnvrAmount = bSrcAmount.toString(); + else if (cnvrChr == 'K') + //cnvrAmount = 변환대상금액 * 원래 매매 비율; + sCnvrAmount = bSrcAmount.multiply(bSrcStdrRt).setScale(2, 4).toString(); + else if (cnvrChr == 'J') + //cnvrAmount = ((변환대상금액 * 원래 매매 비율) / 변환 매매 비율) * 100; + sCnvrAmount = ((bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bCnvrStdrRt, 2, 4)).multiply(bStdr).setScale(2, 4).toString(); + else + //cnvrAmount = (변환대상금액 * 원래 매매 비율) / 변환 매매 비율; + sCnvrAmount = (bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bCnvrStdrRt, 2, 4).toString(); + break; + + case EGHT_JPY: // 일본 + if (cnvrChr == 'J') + //변환금액 = 변환대상금액; + sCnvrAmount = bSrcAmount.toString(); + else if (cnvrChr == 'K') + //cnvrAmount = (변환대상금액 * 원래 매매 비율) / 100; + sCnvrAmount = (bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bStdr, 2, 4).toString(); + else + //cnvrAmount = ((변환대상금액 * 원래 매매 비율) / 100) / 변환 매매 비율; + sCnvrAmount = ((bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bStdr, 2, 4)).divide(bCnvrStdrRt, 2, 4).toString(); + break; + + case EGHT_CNY: // 중국연합 + if (cnvrChr == 'C') + //변환금액 = 변환대상금액; + sCnvrAmount = bSrcAmount.toString(); + else if (cnvrChr == 'K') + //cnvrAmount = 변환대상금액 * 원래 매매 비율; + sCnvrAmount = bSrcAmount.multiply(bSrcStdrRt).setScale(2, 4).toString(); + else if (cnvrChr == 'J') + //cnvrAmount = ((변환대상금액 * 원래 매매 비율) / 변환 매매 비율) * 100; + sCnvrAmount = ((bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bCnvrStdrRt, 2, 4)).multiply(bStdr).setScale(2, 4).toString(); + else + //cnvrAmount = (변환대상금액 * 원래 매매 비율) / 변환 매매 비율; + sCnvrAmount = (bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bCnvrStdrRt, 2, 4).toString(); + break; + + default: + //변환금액 = (변환대상금액 / 변환매매비율); + sCnvrAmount = bSrcAmount.divide(bCnvrStdrRt, 2, 4).toString(); + break; + } + + rtnStr = sCnvrAmount + " " + cnvrStr; + + return rtnStr; + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/utl/fcc/service/EgovFileUploadUtil.java b/src/main/java/egovframework/com/utl/fcc/service/EgovFileUploadUtil.java new file mode 100644 index 0000000..eeebf45 --- /dev/null +++ b/src/main/java/egovframework/com/utl/fcc/service/EgovFileUploadUtil.java @@ -0,0 +1,84 @@ +package egovframework.com.utl.fcc.service; + +import java.io.File; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import egovframework.com.cmm.EgovWebUtil; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +/** + * @Class Name : EgovFileUploadUtil.java + * @Description : Spring 기반 File Upload 유틸리티 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.08.26 한성곤 최초 생성 + * + * @author 공통컴포넌트 개발팀 한성곤 + * @since 2009.08.26 + * @version 1.0 + * @see + */ +public class EgovFileUploadUtil extends EgovFormBasedFileUtil { + /** + * 파일을 Upload 처리한다. + * + * @param request + * @param where + * @param maxFileSize + * @return + * @throws Exception + */ + public static List uploadFiles(HttpServletRequest request, String where, long maxFileSize) throws Exception { + List list = new ArrayList(); + + MultipartHttpServletRequest mptRequest = (MultipartHttpServletRequest) request; + Iterator fileIter = mptRequest.getFileNames(); + + while (fileIter.hasNext()) { + MultipartFile mFile = mptRequest.getFile((String) fileIter.next()); + + EgovFormBasedFileVo vo = new EgovFormBasedFileVo(); + + String tmp = mFile.getOriginalFilename(); + + if (tmp.lastIndexOf("\\") >= 0) { + tmp = tmp.substring(tmp.lastIndexOf("\\") + 1); + } + + vo.setFileName(tmp); + vo.setContentType(mFile.getContentType()); + vo.setServerSubPath(getTodayString()); + vo.setPhysicalName(getPhysicalFileName()); + vo.setSize(mFile.getSize()); + + if (tmp.lastIndexOf(".") >= 0) { + vo.setPhysicalName(vo.getPhysicalName()); // 2012.11 KISA 보안조치 + } + + if (mFile.getSize() > 0) { + InputStream is = null; + + try { + is = mFile.getInputStream(); + saveFile(is, new File(EgovWebUtil.filePathBlackList(where + SEPERATOR + vo.getServerSubPath() + SEPERATOR + vo.getPhysicalName()))); + } finally { + if (is != null) { + is.close(); + } + } + list.add(vo); + } + } + + return list; + } +} diff --git a/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileUtil.java b/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileUtil.java new file mode 100644 index 0000000..dc02255 --- /dev/null +++ b/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileUtil.java @@ -0,0 +1,283 @@ +package egovframework.com.utl.fcc.service; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +import egovframework.com.cmm.EgovWebUtil; +import egovframework.com.cmm.util.EgovResourceCloseHelper; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.fileupload.FileItemIterator; +import org.apache.commons.fileupload.FileItemStream; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.fileupload.util.Streams; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @Class Name : EgovFormBasedFileUtil.java + * @Description : Form-based File Upload 유틸리티 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.08.26 한성곤 최초 생성 + * + * @author 공통컴포넌트 개발팀 한성곤 + * @since 2009.08.26 + * @version 1.0 + * @see + */ +public class EgovFormBasedFileUtil { + /** Buffer size */ + public static final int BUFFER_SIZE = 8192; + + public static final String SEPERATOR = File.separator; + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovFormBasedFileUtil.class); + + /** + * 오늘 날짜 문자열 취득. + * ex) 20090101 + * @return + */ + public static String getTodayString() { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); + + return format.format(new Date()); + } + + /** + * 물리적 파일명 생성. + * @return + */ + public static String getPhysicalFileName() { + return EgovFormBasedUUID.randomUUID().toString().replaceAll("-", "").toUpperCase(); + } + + /** + * 파일명 변환. + * @param filename String + * @return + * @throws Exception + */ + protected static String convert(String filename) throws Exception { + //return java.net.URLEncoder.encode(filename, "utf-8"); + return filename; + } + + /** + * Stream으로부터 파일을 저장함. + * @param is InputStream + * @param file File + * @throws IOException + */ + public static long saveFile(InputStream is, File file) throws IOException { + // 디렉토리 생성 + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + + OutputStream os = null; + long size = 0L; + + try { + os = new FileOutputStream(file); + + int bytesRead = 0; + byte[] buffer = new byte[BUFFER_SIZE]; + + while ((bytesRead = is.read(buffer, 0, BUFFER_SIZE)) != -1) { + size += bytesRead; + os.write(buffer, 0, bytesRead); + } + } finally { + EgovResourceCloseHelper.close(os); + } + + return size; + } + + /** + * 파일을 Upload 처리한다. + * + * @param request + * @param where + * @param maxFileSize + * @return + * @throws Exception + */ + public static List uploadFiles(HttpServletRequest request, String where, long maxFileSize) throws Exception { + List list = new ArrayList(); + + // Check that we have a file upload request + boolean isMultipart = ServletFileUpload.isMultipartContent(request); + + if (isMultipart) { + // Create a new file upload handler + ServletFileUpload upload = new ServletFileUpload(); + upload.setFileSizeMax(maxFileSize); // SizeLimitExceededException + + // Parse the request + FileItemIterator iter = upload.getItemIterator(request); + while (iter.hasNext()) { + FileItemStream item = iter.next(); + String name = item.getFieldName(); + InputStream stream = item.openStream(); + if (item.isFormField()) { + LOGGER.info("Form field '{}' with value '{}' detected.", name, Streams.asString(stream)); + } else { + LOGGER.info("File field '{}' with file name '{}' detected.", name, item.getName()); + + if ("".equals(item.getName())) { + continue; + } + + // Process the input stream + EgovFormBasedFileVo vo = new EgovFormBasedFileVo(); + + String tmp = item.getName(); + + if (tmp.lastIndexOf("\\") >= 0) { + tmp = tmp.substring(tmp.lastIndexOf("\\") + 1); + } + + vo.setFileName(tmp); + vo.setContentType(item.getContentType()); + vo.setServerSubPath(getTodayString()); + vo.setPhysicalName(getPhysicalFileName()); + + if (tmp.lastIndexOf(".") >= 0) { + vo.setPhysicalName(vo.getPhysicalName() + tmp.substring(tmp.lastIndexOf("."))); + } + + long size = saveFile(stream, new File(EgovWebUtil.filePathBlackList(where) + SEPERATOR + vo.getServerSubPath() + SEPERATOR + vo.getPhysicalName())); + + vo.setSize(size); + + list.add(vo); + } + } + } else { + throw new IOException("form's 'enctype' attribute have to be 'multipart/form-data'"); + } + + return list; + } + + /** + * 파일을 Download 처리한다. + * + * @param response + * @param where + * @param serverSubPath + * @param physicalName + * @param original + * @throws Exception + */ + public static void downloadFile(HttpServletResponse response, String where, String serverSubPath, String physicalName, String original) throws Exception { + String downFileName = where + SEPERATOR + serverSubPath + SEPERATOR + physicalName; + + File file = new File(EgovWebUtil.filePathBlackList(downFileName)); + + if (!file.exists()) { + throw new FileNotFoundException(downFileName); + } + + if (!file.isFile()) { + throw new FileNotFoundException(downFileName); + } + + byte[] b = new byte[BUFFER_SIZE]; + + original = original.replaceAll("\r", "").replaceAll("\n", ""); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment; filename=\"" + convert(original) + "\";"); + response.setHeader("Content-Transfer-Encoding", "binary"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Expires", "0"); + + BufferedInputStream fin = null; + BufferedOutputStream outs = null; + + try { + fin = new BufferedInputStream(new FileInputStream(file)); + outs = new BufferedOutputStream(response.getOutputStream()); + + int read = 0; + + while ((read = fin.read(b)) != -1) { + outs.write(b, 0, read); + } + } finally { + EgovResourceCloseHelper.close(outs, fin); + } + } + + /** + * 이미지에 대한 미리보기 기능을 제공한다. + * + * mimeType의 경우는 JSP 상에서 다음과 같이 얻을 수 있다. + * getServletConfig().getServletContext().getMimeType(name); + * + * @param response + * @param where + * @param serverSubPath + * @param physicalName + * @param mimeType + * @throws Exception + */ + public static void viewFile(HttpServletResponse response, String where, String serverSubPath, String physicalName, String mimeTypeParam) throws Exception { + String mimeType = mimeTypeParam; + String downFileName = where + SEPERATOR + serverSubPath + SEPERATOR + physicalName; + + File file = new File(EgovWebUtil.filePathBlackList(downFileName)); + + if (!file.exists()) { + throw new FileNotFoundException(downFileName); + } + + if (!file.isFile()) { + throw new FileNotFoundException(downFileName); + } + + byte[] b = new byte[BUFFER_SIZE]; + + if (mimeType == null) { + mimeType = "application/octet-stream;"; + } + + response.setContentType(EgovWebUtil.removeCRLF(mimeType)); + response.setHeader("Content-Disposition", "filename=image;"); + + BufferedInputStream fin = null; + BufferedOutputStream outs = null; + + try { + fin = new BufferedInputStream(new FileInputStream(file)); + outs = new BufferedOutputStream(response.getOutputStream()); + + int read = 0; + + while ((read = fin.read(b)) != -1) { + outs.write(b, 0, read); + } + } finally { + EgovResourceCloseHelper.close(outs, fin); + } + } +} diff --git a/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileVo.java b/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileVo.java new file mode 100644 index 0000000..48512db --- /dev/null +++ b/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileVo.java @@ -0,0 +1,104 @@ +package egovframework.com.utl.fcc.service; + +import java.io.Serializable; + +/** + * @Class Name : EgovFormBasedFileVo.java + * @Description : Form-based File Upload VO + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.08.26 한성곤 최초 생성 + * + * @author 공통컴포넌트 개발팀 한성곤 + * @since 2009.08.26 + * @version 1.0 + * @see + * + * Copyright (C) 2008 by MOPAS All right reserved. + */ +@SuppressWarnings("serial") +public class EgovFormBasedFileVo implements Serializable { + /** 파일명 */ + private String fileName = ""; + /** ContextType */ + private String contentType = ""; + /** 하위 디렉토리 지정 */ + private String serverSubPath = ""; + /** 물리적 파일명 */ + private String physicalName = ""; + /** 파일 사이즈 */ + private long size = 0L; + + /** + * fileName attribute를 리턴한다. + * @return the fileName + */ + public String getFileName() { + return fileName; + } + /** + * fileName attribute 값을 설정한다. + * @param fileName the fileName to set + */ + public void setFileName(String fileName) { + this.fileName = fileName; + } + /** + * contentType attribute를 리턴한다. + * @return the contentType + */ + public String getContentType() { + return contentType; + } + /** + * contentType attribute 값을 설정한다. + * @param contentType the contentType to set + */ + public void setContentType(String contentType) { + this.contentType = contentType; + } + /** + * serverSubPath attribute를 리턴한다. + * @return the serverSubPath + */ + public String getServerSubPath() { + return serverSubPath; + } + /** + * serverSubPath attribute 값을 설정한다. + * @param serverSubPath the serverSubPath to set + */ + public void setServerSubPath(String serverSubPath) { + this.serverSubPath = serverSubPath; + } + /** + * physicalName attribute를 리턴한다. + * @return the physicalName + */ + public String getPhysicalName() { + return physicalName; + } + /** + * physicalName attribute 값을 설정한다. + * @param physicalName the physicalName to set + */ + public void setPhysicalName(String physicalName) { + this.physicalName = physicalName; + } + /** + * size attribute를 리턴한다. + * @return the size + */ + public long getSize() { + return size; + } + /** + * size attribute 값을 설정한다. + * @param size the size to set + */ + public void setSize(long size) { + this.size = size; + } +} diff --git a/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedUUID.java b/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedUUID.java new file mode 100644 index 0000000..6df377b --- /dev/null +++ b/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedUUID.java @@ -0,0 +1,521 @@ +package egovframework.com.utl.fcc.service; + +import java.io.Serializable; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; + +/** + * + * A class that represents an immutable universally unique identifier (UUID). A + * UUID represents a 128-bit value. + * + *

    + * There exist different variants of these global identifiers. The methods of + * this class are for manipulating the Leach-Salz variant, although the + * constructors allow the creation of any variant of UUID (described below). + * + *

    + * The layout of a variant 2 (Leach-Salz) UUID is as follows: + * + * The most significant long consists of the following unsigned fields: + * + *

    + *   0xFFFFFFFF00000000 time_low
    + *   0x00000000FFFF0000 time_mid
    + *   0x000000000000F000 version
    + *   0x0000000000000FFF time_hi
    + * 
    + * + * The least significant long consists of the following unsigned fields: + * + *
    + *   0xC000000000000000 variant
    + *   0x3FFF000000000000 clock_seq
    + *   0x0000FFFFFFFFFFFF node
    + * 
    + * + *

    + * The variant field contains a value which identifies the layout of the + * UUID. The bit layout described above is valid only for a + * UUID with a variant value of 2, which indicates the Leach-Salz + * variant. + * + *

    + * The version field holds a value that describes the type of this UUID. + * There are four different basic types of UUIDs: time-based, DCE security, + * name-based, and randomly generated UUIDs. These types have a version value of + * 1, 2, 3 and 4, respectively. + * + *

    + * For more information including algorithms used to create UUIDs, + * see the Internet-Draft UUIDs + * and GUIDs or the standards body definition at ISO/IEC 11578:1996. + * + * @version 1.14, 07/12/04 + * @since 1.5 + */ +@SuppressWarnings("serial") +public class EgovFormBasedUUID implements Serializable { + /* + * The most significant 64 bits of this UUID. + * + * @serial + */ + private final long mostSigBits; + + /* + * The least significant 64 bits of this UUID. + * + * @serial + */ + private final long leastSigBits; + + /* + * The version number associated with this UUID. Computed on demand. + */ + private transient int version = -1; + + /* + * The variant number associated with this UUID. Computed on demand. + */ + private transient int variant = -1; + + /* + * The timestamp associated with this UUID. Computed on demand. + */ + private transient volatile long timestamp = -1; + + /* + * The clock sequence associated with this UUID. Computed on demand. + */ + private transient int sequence = -1; + + /* + * The node number associated with this UUID. Computed on demand. + */ + private transient long node = -1; + + /* + * The hashcode of this UUID. Computed on demand. + */ + private transient int hashCode = -1; + + /* + * The random number generator used by this class to create random based + * UUIDs. + */ + private static volatile SecureRandom numberGenerator = null; + + // Constructors and Factories + + /* + * Private constructor which uses a byte array to construct the new UUID. + */ + private EgovFormBasedUUID(byte[] data) { + long msb = 0; + long lsb = 0; + for (int i = 0; i < 8; i++) + msb = (msb << 8) | (data[i] & 0xff); + for (int i = 8; i < 16; i++) + lsb = (lsb << 8) | (data[i] & 0xff); + this.mostSigBits = msb; + this.leastSigBits = lsb; + } + + /** + * Constructs a new UUID using the specified data. + * mostSigBits is used for the most significant 64 bits of the + * UUID and leastSigBits becomes the least significant + * 64 bits of the UUID. + * + * @param mostSigBits + * @param leastSigBits + */ + public EgovFormBasedUUID(long mostSigBits, long leastSigBits) { + this.mostSigBits = mostSigBits; + this.leastSigBits = leastSigBits; + } + + /** + * Static factory to retrieve a type 4 (pseudo randomly generated) UUID. + * + * The UUID is generated using a cryptographically strong + * pseudo random number generator. + * + * @return a randomly generated UUID. + */ + public static EgovFormBasedUUID randomUUID() { + SecureRandom ng = numberGenerator; + if (ng == null) { + numberGenerator = ng = new SecureRandom(); + } + + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + randomBytes[6] &= 0x0f; /* clear version */ + randomBytes[6] |= 0x40; /* set to version 4 */ + randomBytes[8] &= 0x3f; /* clear variant */ + randomBytes[8] |= 0x80; /* set to IETF variant */ + + return new EgovFormBasedUUID(randomBytes); + } + + /** + * Static factory to retrieve a type 3 (name based) UUID based on + * the specified byte array. + * + * @param name + * a byte array to be used to construct a UUID. + * @return a UUID generated from the specified array. + */ + public static EgovFormBasedUUID nameUUIDFromBytes(byte[] name) { + MessageDigest md; + try { + // 2011.10.10 보안점검 후속조치 암호화 알고리즘 변경(MD5 -> SHA-256) + //md = MessageDigest.getInstance("MD5"); + md = MessageDigest.getInstance("SHA-256"); + } catch (NoSuchAlgorithmException nsae) { + //throw new InternalError("MD5 not supported"); + throw new InternalError("SHA-256 not supported"); + } + // 2011.10.10 보안점검 후속조치 + if (md == null) { + throw new RuntimeException("MessageDigest is null!!"); + } + // 2014.09.20 보안점검 후속 조치 + // Random 방식의 salt 추가 + SecureRandom ng = new SecureRandom(); + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + + md.reset(); + md.update(randomBytes); + byte[] sha = md.digest(name); + + + byte[] md5Bytes = new byte[8]; + System.arraycopy(sha, 0, md5Bytes, 0, 8); + //2011.10.10 보안점검 후속조치 끝 + + md5Bytes[6] &= 0x0f; /* clear version */ + md5Bytes[6] |= 0x30; /* set to version 3 */ + md5Bytes[8] &= 0x3f; /* clear variant */ + md5Bytes[8] |= 0x80; /* set to IETF variant */ + + return new EgovFormBasedUUID(md5Bytes); + } + + /** + * Creates a UUID from the string standard representation as + * described in the {@link #toString} method. + * + * @param name + * a string that specifies a UUID. + * @return a UUID with the specified value. + * @throws IllegalArgumentException + * if name does not conform to the string representation as + * described in {@link #toString}. + */ + public static EgovFormBasedUUID fromString(String name) { + String[] components = name.split("-"); + if (components.length != 5) + throw new IllegalArgumentException("Invalid UUID string: " + name); + for (int i = 0; i < 5; i++) + components[i] = "0x" + components[i]; + + long mostSigBits = Long.decode(components[0]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[1]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[2]).longValue(); + + long leastSigBits = Long.decode(components[3]).longValue(); + leastSigBits <<= 48; + leastSigBits |= Long.decode(components[4]).longValue(); + + return new EgovFormBasedUUID(mostSigBits, leastSigBits); + } + + // Field Accessor Methods + + /** + * Returns the least significant 64 bits of this UUID's 128 bit value. + * + * @return the least significant 64 bits of this UUID's 128 bit value. + */ + public long getLeastSignificantBits() { + return leastSigBits; + } + + /** + * Returns the most significant 64 bits of this UUID's 128 bit value. + * + * @return the most significant 64 bits of this UUID's 128 bit value. + */ + public long getMostSignificantBits() { + return mostSigBits; + } + + /** + * The version number associated with this UUID. The version + * number describes how this UUID was generated. + * + * The version number has the following meaning: + *

    + *

      + *
    • 1 Time-based UUID + *
    • 2 DCE security UUID + *
    • 3 Name-based UUID + *
    • 4 Randomly generated UUID + *
    + * + * @return the version number of this UUID. + */ + public int version() { + if (version < 0) { + // Version is bits masked by 0x000000000000F000 in MS long + version = (int) ((mostSigBits >> 12) & 0x0f); + } + return version; + } + + /** + * The variant number associated with this UUID. The variant + * number describes the layout of the UUID. + * + * The variant number has the following meaning: + *

    + *

      + *
    • 0 Reserved for NCS backward compatibility + *
    • 2 The Leach-Salz variant (used by this class) + *
    • 6 Reserved, Microsoft Corporation backward compatibility + *
    • 7 Reserved for future definition + *
    + * + * @return the variant number of this UUID. + */ + public int variant() { + if (variant < 0) { + // This field is composed of a varying number of bits + if ((leastSigBits >>> 63) == 0) { + variant = 0; + } else if ((leastSigBits >>> 62) == 2) { + variant = 2; + } else { + variant = (int) (leastSigBits >>> 61); + } + } + return variant; + } + + /** + * The timestamp value associated with this UUID. + * + *

    + * The 60 bit timestamp value is constructed from the time_low, time_mid, + * and time_hi fields of this UUID. The resulting timestamp is + * measured in 100-nanosecond units since midnight, October 15, 1582 UTC. + *

    + * + * The timestamp value is only meaningful in a time-based UUID, which has + * version type 1. If this UUID is not a time-based UUID then + * this method throws UnsupportedOperationException. + * + * @throws UnsupportedOperationException + * if this UUID is not a version 1 UUID. + */ + public long timestamp() { + if (version() != 1) { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + long result = timestamp; + if (result < 0) { + result = (mostSigBits & 0x0000000000000FFFL) << 48; + result |= ((mostSigBits >> 16) & 0xFFFFL) << 32; + result |= mostSigBits >>> 32; + timestamp = result; + } + return result; + } + + /** + * The clock sequence value associated with this UUID. + * + *

    + * The 14 bit clock sequence value is constructed from the clock sequence + * field of this UUID. The clock sequence field is used to guarantee + * temporal uniqueness in a time-based UUID. + *

    + * + * The clockSequence value is only meaningful in a time-based UUID, which + * has version type 1. If this UUID is not a time-based UUID then this + * method throws UnsupportedOperationException. + * + * @return the clock sequence of this UUID. + * @throws UnsupportedOperationException + * if this UUID is not a version 1 UUID. + */ + public int clockSequence() { + if (version() != 1) { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + if (sequence < 0) { + sequence = (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48); + } + return sequence; + } + + /** + * The node value associated with this UUID. + * + *

    + * The 48 bit node value is constructed from the node field of this UUID. + * This field is intended to hold the IEEE 802 address of the machine that + * generated this UUID to guarantee spatial uniqueness. + *

    + * + * The node value is only meaningful in a time-based UUID, which has version + * type 1. If this UUID is not a time-based UUID then this method throws + * UnsupportedOperationException. + * + * @return the node value of this UUID. + * @throws UnsupportedOperationException + * if this UUID is not a version 1 UUID. + */ + public long node() { + if (version() != 1) { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + if (node < 0) { + node = leastSigBits & 0x0000FFFFFFFFFFFFL; + } + return node; + } + + // Object Inherited Methods + + /** + * Returns a String object representing this + * UUID. + * + *

    + * The UUID string representation is as described by this BNF : + * + *

    +     *    UUID                   = <time_low> "-" <time_mid> "-"
    +     *                             <time_high_and_version> "-"
    +     *                             <variant_and_sequence> "-"
    +     *                             <node>
    +     *    time_low               = 4*<hexOctet>
    +     *    time_mid               = 2*<hexOctet>
    +     *    time_high_and_version  = 2*<hexOctet>
    +     *    variant_and_sequence   = 2*<hexOctet>
    +     *    node                   = 6*<hexOctet>
    +     *    hexOctet               = <hexDigit><hexDigit>
    +     *    hexDigit               =
    +     *          "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
    +     *          | "a" | "b" | "c" | "d" | "e" | "f"
    +     *          | "A" | "B" | "C" | "D" | "E" | "F"
    +     * 
    + * + * @return a string representation of this UUID. + */ + @Override + public String toString() { + return (digits(mostSigBits >> 32, 8) + "-" + + digits(mostSigBits >> 16, 4) + "-" + digits(mostSigBits, 4) + + "-" + digits(leastSigBits >> 48, 4) + "-" + digits( + leastSigBits, 12)); + } + + /** Returns val represented by the specified number of hex digits. */ + private static String digits(long val, int digits) { + long hi = 1L << (digits * 4); + return Long.toHexString(hi | (val & (hi - 1))).substring(1); + } + + /** + * Returns a hash code for this UUID. + * + * @return a hash code value for this UUID. + */ + @Override + public int hashCode() { + if (hashCode == -1) { + hashCode = (int) ((mostSigBits >> 32) ^ mostSigBits + ^ (leastSigBits >> 32) ^ leastSigBits); + } + return hashCode; + } + + /** + * Compares this object to the specified object. The result is true + * if and only if the argument is not null, is a UUID + * object, has the same variant, and contains the same value, bit for bit, + * as this UUID. + * + * @param obj + * the object to compare with. + * @return true if the objects are the same; + * false otherwise. + */ + @Override + public boolean equals(Object obj) { + // 보안 취약점 점검 지적사항 반영 시작 + if (obj == null) + return false; + // 보안 취약점 점검 지적사항 반영 시작 끝 + if (!(obj instanceof EgovFormBasedUUID)) + return false; + if (((EgovFormBasedUUID) obj).variant() != this.variant()) + return false; + EgovFormBasedUUID id = (EgovFormBasedUUID) obj; + return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits); + } + + // Comparison Operations + + /** + * Compares this UUID with the specified UUID. + * + *

    + * The first of two UUIDs follows the second if the most significant field + * in which the UUIDs differ is greater for the first UUID. + * + * @param val + * UUID to which this UUID is to be + * compared. + * @return -1, 0 or 1 as this UUID is less than, equal to, or + * greater than val. + */ + public int compareTo(EgovFormBasedUUID val) { + // The ordering is intentionally set up so that the UUIDs + // can simply be numerically compared as two numbers + return (this.mostSigBits < val.mostSigBits ? -1 + : (this.mostSigBits > val.mostSigBits ? 1 + : (this.leastSigBits < val.leastSigBits ? -1 + : (this.leastSigBits > val.leastSigBits ? 1 : 0)))); + } + + /** + * Reconstitute the UUID instance from a stream (that is, + * deserialize it). This is necessary to set the transient fields to their + * correct uninitialized value so they will be recomputed on demand. + */ + private void readObject(java.io.ObjectInputStream in) + throws java.io.IOException, ClassNotFoundException { + + in.defaultReadObject(); + + // Set "cached computation" fields to their initial values + version = -1; + variant = -1; + timestamp = -1; + sequence = -1; + node = -1; + hashCode = -1; + } +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/utl/fcc/service/EgovFormatCheckUtil.java b/src/main/java/egovframework/com/utl/fcc/service/EgovFormatCheckUtil.java new file mode 100644 index 0000000..fbdc29c --- /dev/null +++ b/src/main/java/egovframework/com/utl/fcc/service/EgovFormatCheckUtil.java @@ -0,0 +1,207 @@ +package egovframework.com.utl.fcc.service; + +/** + * + * 포맷유효성체크 에 대한 Util 클래스 + * @author 공통컴포넌트 개발팀 윤성록 + * @since 2009.06.23 + * @version 1.0 + * @see + * + *

    + * << 개정이력(Modification Information) >>
    + *   
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.06.23  윤성록          최초 생성
    + *
    + * 
    + */ +public class EgovFormatCheckUtil { + + /** + *

    XXX - XXX- XXXX 형식의 전화번호 앞, 중간, 뒤 문자열 3개 입력 받아 유요한 전화번호형식인지 검사.

    + * + * + * @param 전화번호 문자열( 3개 ) + * @return 유효한 전화번호 형식인지 여부 (True/False) + */ + public static boolean checkFormatTell(String tell1, String tell2, String tell3) { + + String[] check = {"02", "031", "032", "033", "041", "042", "043", "051", "052", "053", "054", "055", "061", + "062", "063", "070", "080", "0505"}; //존재하는 국번 데이터 + String temp = tell1 + tell2 + tell3; + + for(int i=0; i < temp.length(); i++){ + if (temp.charAt(i) < '0' || temp.charAt(i) > '9') + return false; + } //숫자가 아닌 값이 들어왔는지를 확인 + + for(int i = 0; i < check.length; i++){ + if(tell1.equals(check[i])) break; + if(i == check.length - 1) return false; + } //국번입력이 제대로 되었는지를 확인 + + if(tell2.charAt(0) == '0') return false; + + if(tell1.equals("02")){ + if(tell2.length() != 3 && tell2.length() !=4) return false; + if(tell3.length() != 4) return false; //서울지역(02)국번 입력때의 전화 번호 형식유효성 체크 + }else{ + if(tell2.length() != 3) return false; + if(tell3.length() != 4) return false; + } //서울을 제외한 지역(국번 입력때의 전화 번호 형식유효성 체크 + + return true; + } + + /** + *

    XXX - XXX- XXXX 형식의 전화번호 하나를 입력 받아 유요한 전화번호형식인지 검사.

    + * + * + * @param 전화번호 문자열 (1개) + * @return 유효한 전화번호 형식인지 여부 (True/False) + */ + public static boolean checkFormatTell(String tellNumber) { + + String temp1; + String temp2; + String temp3; + String tell = tellNumber; + + tell = tell.replace("-", ""); + + if(tell.length() < 9 || tell.length() > 11 || tell.charAt(0) != '0') return false; //전화번호 길이에 대한 체크 + + if(tell.charAt(1) =='2'){ //서울지역 (02)국번의 경우일때 + temp1 = tell.substring(0,2); + if(tell.length() == 9){ + temp2 = tell.substring(2,5); + temp3 = tell.substring(5,9); + }else if(tell.length() == 10){ + temp2 = tell.substring(2,6); + temp3 = tell.substring(6,10); + }else + return false; + } else if(tell.substring(0,4).equals("0505")){ //평생번호(0505)국번의 경우일때 + if(tell.length() != 11) return false; + temp1 = tell.substring(0,4); + temp2 = tell.substring(4,7); + temp3 = tell.substring(7,11); + } else { // 서울지역 및 "0505" 를 제외한 일반적인 경우일때 + if(tell.length() != 10) return false; + temp1 = tell.substring(0,3); + temp2 = tell.substring(3,6); + temp3 = tell.substring(6,10); + } + + return checkFormatTell(temp1, temp2, temp3); + } + + /** + *

    XXX - XXX- XXXX 형식의 휴대폰번호 앞, 중간, 뒤 문자열 3개 입력 받아 유요한 휴대폰번호형식인지 검사.

    + * + * + * @param 휴대폰번호 문자열,(3개) + * @return 유효한 휴대폰번호 형식인지 여부 (True/False) + */ + public static boolean checkFormatCell(String cell1, String cell2, String cell3) { + String[] check = {"010", "011", "016", "017", "018", "019"}; //유효한 휴대폰 첫자리 번호 데이터 + String temp = cell1 + cell2 + cell3; + + for(int i=0; i < temp.length(); i++){ + if (temp.charAt(i) < '0' || temp.charAt(i) > '9') + return false; + } //숫자가 아닌 값이 들어왔는지를 확인 + + for(int i = 0; i < check.length; i++){ + if(cell1.equals(check[i])) break; + if(i == check.length - 1) return false; + } // 휴대폰 첫자리 번호입력의 유효성 체크 + + if(cell2.charAt(0) == '0') return false; + + if(cell2.length() != 3 && cell2.length() !=4) return false; + if(cell3.length() != 4) return false; + + return true; + } + + /** + *

    XXXXXXXXXX 형식의 휴대폰번호 문자열 3개 입력 받아 유요한 휴대폰번호형식인지 검사.

    + * + * + * @param 휴대폰번호 문자열(1개) + * @return 유효한 휴대폰번호 형식인지 여부 (True/False) + */ + public static boolean checkFormatCell(String cellNumber) { + + String temp1; + String temp2; + String temp3; + + String cell = cellNumber; + cell = cell.replace("-", ""); + + if(cell.length() < 10 || cell.length() > 11 || cell.charAt(0) != '0') return false; + + if(cell.length() == 10){ //전체 10자리 휴대폰 번호일 경우 + temp1 = cell.substring(0,3); + temp2 = cell.substring(3,6); + temp3 = cell.substring(6,10); + }else{ //전체 11자리 휴대폰 번호일 경우 + temp1 = cell.substring(0,3); + temp2 = cell.substring(3,7); + temp3 = cell.substring(7,11); + } + + return checkFormatCell(temp1, temp2, temp3); + } + + /** + *

    이메일의 앞, 뒤 문자열 2개 입력 받아 유요한 이메일형식인지 검사.

    + * + * + * @param 이메일 문자열 (2개) + * @return 유효한 이메일 형식인지 여부 (True/False) + */ + public static boolean checkFormatMail(String mail1, String mail2) { + + int count = 0; + + for(int i = 0; i < mail1.length(); i++){ + if(mail1.charAt(i) <= 'z' && mail1.charAt(i) >= 'a') continue; + else if(mail1.charAt(i) <= 'Z' && mail1.charAt(i) >= 'A') continue; + else if(mail1.charAt(i) <= '9' && mail1.charAt(i) >= '0') continue; + else if(mail1.charAt(i) == '-' && mail1.charAt(i) == '_') continue; + else return false; + } // 유효한 문자, 숫자인지 체크 + + for(int i = 0; i < mail2.length(); i++){ + if(mail2.charAt(i) <= 'z' && mail2.charAt(i) >= 'a') continue; + else if(mail2.charAt(i) == '.'){ count++; continue;} + else return false; + } // 메일 주소의 형식 체크(XXX.XXX 형태) + + if(count == 1) return true; + else return false; + + } + + /** + *

    이메일의 전체문자열 1개 입력 받아 유요한 이메일형식인지 검사.

    + * + * + * @param 이메일 문자열 (1개) + * @return 유효한 이메일 형식인지 여부 (True/False) + */ + public static boolean checkFormatMail(String mail) { + + String[] temp = mail.split("@"); // '@' 를 기점으로 앞, 뒤 문자열 구분 + + if(temp.length == 2) return checkFormatMail(temp[0], temp[1]); + else return false; + } + +} + diff --git a/src/main/java/egovframework/com/utl/fcc/service/EgovNumberCheckUtil.java b/src/main/java/egovframework/com/utl/fcc/service/EgovNumberCheckUtil.java new file mode 100644 index 0000000..88d3370 --- /dev/null +++ b/src/main/java/egovframework/com/utl/fcc/service/EgovNumberCheckUtil.java @@ -0,0 +1,246 @@ +package egovframework.com.utl.fcc.service; + +/** + * + * 번호유효성체크 에 대한 Util 클래스 + * @author 공통컴포넌트 개발팀 윤성록 + * @since 2009.06.10 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.06.10  윤성록          최초 생성
    + *   2012.02.27  이기하          법인번호 체크로직 수정
    + *
    + * 
    + */ +public class EgovNumberCheckUtil { + + /** + *

    XXXXXX - XXXXXXX 형식의 주민번호 앞, 뒤 문자열 2개 입력 받아 유효한 주민번호인지 검사.

    + * + * + * @param 6자리 주민앞번호 문자열 , 7자리 주민뒷번호 문자열 + * @return 유효한 주민번호인지 여부 (True/False) + */ + @SuppressWarnings("static-access") + public static boolean checkJuminNumber(String jumin1, String jumin2) { + + EgovDateUtil egovDateUtil = new EgovDateUtil(); + String juminNumber = jumin1 + jumin2; + String IDAdd = "234567892345"; // 주민등록번호에 가산할 값 + + int count_num = 0; + int add_num = 0; + int total_id = 0; //검증을 위한 변수선언 + + if (juminNumber.length() != 13) return false; // 주민등록번호 자리수가 맞는가를 확인 + + for (int i = 0; i <12 ; i++){ + if(juminNumber.charAt(i)< '0' || juminNumber.charAt(i) > '9') return false; //숫자가 아닌 값이 들어왔는지를 확인 + count_num = Character.getNumericValue(juminNumber.charAt(i)); + add_num = Character.getNumericValue(IDAdd.charAt(i)); + total_id += count_num * add_num; //유효자리 검증식을 적용 + } + + if(Character.getNumericValue(juminNumber.charAt(0)) == 0 || Character.getNumericValue(juminNumber.charAt(0)) == 1){ + if(Character.getNumericValue(juminNumber.charAt(6)) > 4) return false; + String temp = "20" + juminNumber.substring(0,6); + if(!egovDateUtil.checkDate(temp)) return false; + }else{ + if(Character.getNumericValue(juminNumber.charAt(6)) > 2) return false; + String temp = "19" + juminNumber.substring(0,6); + if(!egovDateUtil.checkDate(temp)) return false; + } //주민번호 앞자리 날짜유효성체크 & 성별구분 숫자 체크 + + if(Character.getNumericValue(juminNumber.charAt(12)) == (11 - (total_id % 11)) % 10) //마지막 유효숫자와 검증식을 통한 값의 비교 + return true; + else + return false; + } + + /** + *

    XXXXXXXXXXXXX 형식의 13자리 주민번호 1개를 입력 받아 유효한 주민번호인지 검사.

    + * + * + * @param 13자리 주민번호 문자열 + * @return 유효한 주민번호인지 여부 (True/False) + */ + public static boolean checkJuminNumber(String jumin) { + + if(jumin.length() != 13) return false; + + return checkJuminNumber(jumin.substring(0,6), jumin.substring(6,13)); //주민번호 + } + + /** + *

    XXXXXX - XXXXXXX 형식의 법인번호 앞, 뒤 문자열 2개 입력 받아 유효한 법인번호인지 검사.

    + * + * + * @param 6자리 법인앞번호 문자열 , 7자리 법인뒷번호 문자열 + * @return 유효한 법인번호인지 여부 (True/False) + */ + public static boolean checkBubinNumber(String bubin1, String bubin2) { + + String bubinNumber = bubin1 + bubin2; + + int hap = 0; + int temp = 1; //유효검증식에 사용하기 위한 변수 + + if(bubinNumber.length() != 13) return false; //법인번호의 자리수가 맞는 지를 확인 + + for(int i=0; i < 13; i++){ + if (bubinNumber.charAt(i) < '0' || bubinNumber.charAt(i) > '9') //숫자가 아닌 값이 들어왔는지를 확인 + return false; + } + + + // 2012.02.27 법인번호 체크로직 수정( i<13 -> i<12 ) + // 맨끝 자리 수는 전산시스템으로 오류를 검증하기 위해 부여되는 검증번호임 + for ( int i=0; i<12; i++){ + if(temp ==3) temp = 1; + hap = hap + (Character.getNumericValue(bubinNumber.charAt(i)) * temp); + temp++; + } //검증을 위한 식의 계산 + + if ((10 - (hap%10))%10 == Character.getNumericValue(bubinNumber.charAt(12))) //마지막 유효숫자와 검증식을 통한 값의 비교 + return true; + else + return false; + } + + /** + *

    XXXXXXXXXXXXX 형식의 13자리 법인번호 1개를 입력 받아 유효한 법인번호인지 검사.

    + * + * + * @param 13자리 법인번호 문자열 + * @return 유효한 법인번호인지 여부 (True/False) + */ + public static boolean checkBubinNumber(String bubin) { + + if(bubin.length() != 13) return false; + + return checkBubinNumber(bubin.substring(0,6), bubin.substring(6,13)); + } + + + /** + *

    XXX - XX - XXXXX 형식의 사업자번호 앞,중간, 뒤 문자열 3개 입력 받아 유효한 사업자번호인지 검사.

    + * + * + * @param 3자리 사업자앞번호 문자열 , 2자리 사업자중간번호 문자열, 5자리 사업자뒷번호 문자열 + * @return 유효한 사업자번호인지 여부 (True/False) + */ + public static boolean checkCompNumber(String comp1, String comp2, String comp3) { + + String compNumber = comp1 + comp2 + comp3; + + int hap = 0; + int temp = 0; + int check[] = {1,3,7,1,3,7,1,3,5}; //사업자번호 유효성 체크 필요한 수 + + if(compNumber.length() != 10) //사업자번호의 길이가 맞는지를 확인한다. + return false; + + for(int i=0; i < 9; i++){ + if(compNumber.charAt(i) < '0' || compNumber.charAt(i) > '9') //숫자가 아닌 값이 들어왔는지를 확인한다. + return false; + + hap = hap + (Character.getNumericValue(compNumber.charAt(i)) * check[temp]); //검증식 적용 + temp++; + } + + hap += (Character.getNumericValue(compNumber.charAt(8))*5)/10; + + if ((10 - (hap%10))%10 == Character.getNumericValue(compNumber.charAt(9))) //마지막 유효숫자와 검증식을 통한 값의 비교 + return true; + else + return false; + } + + /** + *

    XXXXXXXXXX 형식의 10자리 사업자번호 3개를 입력 받아 유효한 사업자번호인지 검사.

    + * + * + * @param 10자리 사업자번호 문자열 + * @return 유효한 사업자번호인지 여부 (True/False) + */ + public static boolean checkCompNumber(String comp) { + + if(comp.length() != 10) return false; + return checkCompNumber(comp.substring(0,3), comp.substring(3,5), comp.substring(5,10)); + } + + /** + *

    XXXXXX - XXXXXXX 형식의 외국인등록번호 앞, 뒤 문자열 2개 입력 받아 유효한 외국인등록번호인지 검사.

    + * + * + * @param 6자리 외국인등록앞번호 문자열 , 7자리 외국인등록뒷번호 문자열 + * @return 유효한 외국인등록번호인지 여부 (True/False) + */ + @SuppressWarnings("static-access") + public static boolean checkforeignNumber( String foreign1, String foreign2 ) { + + EgovDateUtil egovDateUtil = new EgovDateUtil(); + String foreignNumber = foreign1 + foreign2; + int check = 0; + + if( foreignNumber.length() != 13 ) //외국인등록번호의 길이가 맞는지 확인한다. + return false; + + for(int i=0; i < 13; i++){ + if (foreignNumber.charAt(i) < '0' || foreignNumber.charAt(i) > '9') //숫자가 아닌 값이 들어왔는지를 확인한다. + return false; + } + + if(Character.getNumericValue(foreignNumber.charAt(0)) == 0 || Character.getNumericValue(foreignNumber.charAt(0)) == 1){ + if(Character.getNumericValue(foreignNumber.charAt(6)) == 5 && Character.getNumericValue(foreignNumber.charAt(6)) == 6) return false; + String temp = "20" + foreignNumber.substring(0,6); + if(!egovDateUtil.checkDate(temp)) return false; + }else{ + if(Character.getNumericValue(foreignNumber.charAt(6)) == 5 && Character.getNumericValue(foreignNumber.charAt(6)) == 6) return false; + String temp = "19" + foreignNumber.substring(0,6); + if(!egovDateUtil.checkDate(temp)) return false; + } //외국인등록번호 앞자리 날짜유효성체크 & 성별구분 숫자 체크 + + for( int i = 0 ; i < 12 ; i++ ) { + check += ( ( 9 - i % 8 ) * Character.getNumericValue( foreignNumber.charAt( i ) ) ); + } + + if ( check % 11 == 0 ){ + check = 1; + }else if ( check % 11==10 ){ + check = 0; + }else + check = check % 11; + + if ( check + 2 > 9 ){ + check = check + 2- 10; + }else check = check+2; //검증식을 통합 값의 도출 + + if( check == Character.getNumericValue( foreignNumber.charAt( 12 ) ) ) //마지막 유효숫자와 검증식을 통한 값의 비교 + return true; + else + return false; + } + + + /** + *

    XXXXXXXXXXXXX 형식의 13자리 외국인등록번호 1개를 입력 받아 유효한 외국인등록번호인지 검사.

    + * + * + * @param 13자리 외국인등록번호 문자열 + * @return 유효한 외국인등록번호인지 여부 (True/False) + */ + public static boolean checkforeignNumber( String foreign ) { + + if(foreign.length() != 13) return false; + return checkforeignNumber(foreign.substring(0,6), foreign.substring(6,13)); + } +} + + diff --git a/src/main/java/egovframework/com/utl/fcc/service/EgovNumberFormat.java b/src/main/java/egovframework/com/utl/fcc/service/EgovNumberFormat.java new file mode 100644 index 0000000..701eda4 --- /dev/null +++ b/src/main/java/egovframework/com/utl/fcc/service/EgovNumberFormat.java @@ -0,0 +1,258 @@ +package egovframework.com.utl.fcc.service; + +import java.text.NumberFormat; +import java.util.Locale; + +/** + * 숫자, 통화, 퍼센트에 대한 형식 변환을 수행하는 클래스 + */ +public class EgovNumberFormat { + + private static final int MAX_FRACTION_DIGIT = 3; + private static final boolean GROUPING_USED = true; + + /** + * 기본 Locale에 해당하는 형식으로 숫자를 변환한다. + * + * @param number 숫자 + * @return 숫자 문자열 + */ + public static String formatNumber(Number number) { + return formatNumber(number, GROUPING_USED, MAX_FRACTION_DIGIT); + } + + /** + * Locale에 해당하는 형식으로 숫자를 변환한다. + * + * @param locale 로케일 + * @param number 숫자 + * @return 숫자 문자열 + */ + public static String formatNumber(Locale locale, Number number) { + return formatNumber(locale, number, GROUPING_USED, MAX_FRACTION_DIGIT); + } + + /** + * 기본 Locale에 해당하는 형식으로 숫자를 변환한다. + * + * @param number 숫자 + * @param groupingUsed 그룹 분리기호 포함 여부 + * @return 숫자 문자열 + */ + public static String formatNumber(Number number, boolean groupingUsed) { + return formatNumber(number, groupingUsed, MAX_FRACTION_DIGIT); + } + + /** + * Locale에 해당하는 형식으로 숫자를 변환한다. + * + * @param locale 로케일 + * @param number 숫자 + * @param groupingUsed 그룹 분리기호 포함 여부 + * @return 숫자 문자열 + */ + public static String formatNumber(Locale locale, Number number, boolean groupingUsed) { + return formatNumber(locale, number, groupingUsed, MAX_FRACTION_DIGIT); + } + + /** + * 기본 Locale에 해당하는 형식으로 숫자를 변환한다. + * + * @param number 숫자 + * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수 + * @return 숫자 문자열 + */ + public static String formatNumber(Number number, int maxFactionDigits) { + return formatNumber(number, GROUPING_USED, maxFactionDigits); + } + + /** + * Locale에 해당하는 형식으로 숫자를 변환한다. + * + * @param locale 로케일 + * @param number 숫자 + * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수 + * @return 숫자 문자열 + */ + public static String formatNumber(Locale locale, Number number, int maxFactionDigits) { + return formatNumber(locale, number, GROUPING_USED, maxFactionDigits); + } + + /** + * 기본 Locale에 해당하는 형식으로 숫자를 변환한다. + * + * @param number 숫자 + * @param groupingUsed 그룹 분리기호 포함 여부 + * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수 + * @return 숫자 문자열 + */ + public static String formatNumber(Number number, boolean groupingUsed, int maxFactionDigits) { + NumberFormat numberberFormat = NumberFormat.getNumberInstance(); + numberberFormat.setGroupingUsed(groupingUsed); + numberberFormat.setMaximumFractionDigits(maxFactionDigits); + return numberberFormat.format(number); + } + + /** + * Locale에 해당하는 형식으로 숫자를 변환한다. + * + * @param locale 로케일 + * @param number 숫자 + * @param groupingUsed 그룹 분리기호 포함 여부 + * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수 + * @return 숫자 문자열 + */ + public static String formatNumber(Locale locale, Number number, boolean groupingUsed, int maxFactionDigits) { + NumberFormat numberberFormat = NumberFormat.getNumberInstance(locale); + numberberFormat.setGroupingUsed(groupingUsed); + numberberFormat.setMaximumFractionDigits(maxFactionDigits); + return numberberFormat.format(number); + } + + /** + * 기본 Locale에 해당하는 형식으로 통화를 변환한다. + * + * @param number 숫자 + * @return 통화 문자열 + */ + public static String formatCurrency(Number number) { + return formatCurrency(number, GROUPING_USED); + } + + /** + * Locale에 해당하는 형식으로 통화를 변환한다. + * + * @param locale 로케일 + * @param number 숫자 + * @return 통화 문자열 + */ + public static String formatCurrency(Locale locale, Number number) { + return formatCurrency(locale, number, GROUPING_USED); + } + + /** + * 기본 Locale에 해당하는 형식으로 통화를 변환한다. + * + * @param number 숫자 + * @param groupingUsed 그룹 분리기호 포함 여부 + * @return 통화 문자열 + */ + public static String formatCurrency(Number number, boolean groupingUsed) { + NumberFormat numberberFormat = NumberFormat.getCurrencyInstance(); + numberberFormat.setGroupingUsed(groupingUsed); + return numberberFormat.format(number); + } + + /** + * Locale에 해당하는 형식으로 통화를 변환한다. + * + * @param locale 로케일 + * @param number 숫자 + * @param groupingUsed 그룹 분리기호 포함 여부 + * @return 통화 문자열 + */ + public static String formatCurrency(Locale locale, Number number, boolean groupingUsed) { + NumberFormat numberberFormat = NumberFormat.getCurrencyInstance(locale); + numberberFormat.setGroupingUsed(groupingUsed); + return numberberFormat.format(number); + } + + /** + * 기본 Locale에 해당하는 형식으로 퍼센트를 변환한다. + * + * @param number 숫자 + * @return 퍼센트 문자열 + */ + public static String formatPercent(Number number) { + return formatPercent(number, GROUPING_USED, MAX_FRACTION_DIGIT); + } + + /** + * Locale에 해당하는 형식으로 퍼센트를 변환한다. + * + * @param locale 로케일 + * @param number 숫자 + * @return 퍼센트 문자열 + */ + public static String formatPercent(Locale locale, Number number) { + return formatPercent(locale, number, GROUPING_USED, MAX_FRACTION_DIGIT); + } + + /** + * 기본 Locale에 해당하는 형식으로 퍼센트를 변환한다. + * + * @param number 숫자 + * @param groupingUsed 그룹 분리기호 포함 여부 + * @return 퍼센트 문자열 + */ + public static String formatPercent(Number number, boolean groupingUsed) { + return formatPercent(number, groupingUsed, MAX_FRACTION_DIGIT); + } + + /** + * Locale에 해당하는 형식으로 퍼센트를 변환한다. + * + * @param locale 로케일 + * @param number 숫자 + * @param groupingUsed 그룹 분리기호 포함 여부 + * @return 퍼센트 문자열 + */ + public static String formatPercent(Locale locale, Number number, boolean groupingUsed) { + return formatPercent(locale, number, groupingUsed, MAX_FRACTION_DIGIT); + } + + /** + * 기본 Locale에 해당하는 형식으로 퍼센트를 변환한다. + * + * @param number 숫자 + * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수 + * @return 퍼센트 문자열 + */ + public static String formatPercent(Number number, int maxFactionDigits) { + return formatPercent(number, GROUPING_USED, maxFactionDigits); + } + + /** + * Locale에 해당하는 형식으로 퍼센트를 변환한다. + * + * @param locale 로케일 + * @param number 숫자 + * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수 + * @return 퍼센트 문자열 + */ + public static String formatPercent(Locale locale, Number number, int maxFactionDigits) { + return formatPercent(locale, number, GROUPING_USED, maxFactionDigits); + } + + /** + * 기본 Locale에 해당하는 형식으로 퍼센트를 변환한다. + * + * @param number 숫자 + * @param groupingUsed 그룹 분리기호 포함 여부 + * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수 + * @return 퍼센트 문자열 + */ + public static String formatPercent(Number number, boolean groupingUsed, int maxFactionDigits) { + NumberFormat numberberFormat = NumberFormat.getPercentInstance(); + numberberFormat.setGroupingUsed(groupingUsed); + numberberFormat.setMaximumFractionDigits(maxFactionDigits); + return numberberFormat.format(number); + } + + /** + * Locale에 해당하는 형식으로 퍼센트를 변환한다. + * + * @param locale 로케일 + * @param number 숫자 + * @param groupingUsed 그룹 분리기호 포함 여부 + * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수 + * @return 퍼센트 문자열 + */ + public static String formatPercent(Locale locale, Number number, boolean groupingUsed, int maxFactionDigits) { + NumberFormat numberberFormat = NumberFormat.getPercentInstance(locale); + numberberFormat.setGroupingUsed(groupingUsed); + numberberFormat.setMaximumFractionDigits(maxFactionDigits); + return numberberFormat.format(number); + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/utl/fcc/service/EgovNumberUtil.java b/src/main/java/egovframework/com/utl/fcc/service/EgovNumberUtil.java new file mode 100644 index 0000000..2735e8b --- /dev/null +++ b/src/main/java/egovframework/com/utl/fcc/service/EgovNumberUtil.java @@ -0,0 +1,216 @@ +/** + * @Class Name : EgovNumberUtil.java + * @Description : 숫자 데이터 처리 관련 유틸리티 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.02.13 이삼섭 최초 생성 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 02. 13 + * @version 1.0 + * @see + * + */ + +package egovframework.com.utl.fcc.service; + +import java.security.SecureRandom; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +public class EgovNumberUtil { + + /** + * 특정숫자 집합에서 랜덤 숫자를 구하는 기능 시작숫자와 종료숫자 사이에서 구한 랜덤 숫자를 반환한다 + * + * @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) { + throw new RuntimeException(e); + } + + 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; + //String sourceStr = String.valueOf(sourceInt); + + 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/egovframework/com/utl/fcc/service/EgovStringUtil.java b/src/main/java/egovframework/com/utl/fcc/service/EgovStringUtil.java new file mode 100644 index 0000000..eaaee5f --- /dev/null +++ b/src/main/java/egovframework/com/utl/fcc/service/EgovStringUtil.java @@ -0,0 +1,884 @@ +/** + * @Class Name : EgovStringUtil.java + * @Description : 문자열 데이터 처리 관련 유틸리티 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.01.13 박정규 최초 생성 + * 2009.02.13 이삼섭 내용 추가 + * + * @author 공통 서비스 개발팀 박정규 + * @since 2009. 01. 13 + * @version 1.0 + * @see + * + */ + +package egovframework.com.utl.fcc.service; + +/* + * 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; + +public class EgovStringUtil { + /** + * 빈 문자열 "". + */ + 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; + + 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(); + + 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/egovframework/com/utl/sim/service/EgovFileMntrg.java b/src/main/java/egovframework/com/utl/sim/service/EgovFileMntrg.java new file mode 100644 index 0000000..57720b8 --- /dev/null +++ b/src/main/java/egovframework/com/utl/sim/service/EgovFileMntrg.java @@ -0,0 +1,333 @@ +/** + * Class Name : EgovFileMntrg.java + * Description : 시스템 네트워크 정보를 확인하여 제공하는 Business class + * Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.01.13 조재영 최초 생성 + * 2017.03.06 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476] + * + * @author 공통 서비스 개발팀 조재영 + * @since 2009. 01. 13 + * @version 1.0 + * @see + * + * Copyright (C) 2009 by EGOV All right reserved. + */ +package egovframework.com.utl.sim.service; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.List; + +import egovframework.com.cmm.util.EgovBasicLogger; +import egovframework.com.cmm.util.EgovResourceCloseHelper; + +public class EgovFileMntrg extends Thread { + + /** + *

    + * 해당 파일의 변경 유무를 체크하기 위한 Default 초의 stati final 변수, 기본 적용은 값은 60초 + *

    + */ + //static final public long DEFAULT_DELAY = 60000; // 60초 + static final public long DEFAULT_DELAY = 30000; // 30초 + + /** + * 최대 문자길이 + **/ + static final int MAX_STR_LEN = 1024; + + /** + *

    + * 파일의 변경 유무를 체크하기 위한 해당파일명 변수 + *

    + */ + protected String filename; + + /** + *

    + * 해당 파일의 변경 유무를 체크하기 위한 Default 초의 stati final 변수, 기본 적용은 값은 60초{@link + * #DEFAULT_DELAY}. + *

    + */ + protected long delay = DEFAULT_DELAY; + + File file; // 타겟(감시대상) 디렉토리 + File logFile; // 감시정보보관용 로그파일 + long lastModif = 0; + boolean warnedAlready = false; + boolean interrupted = false; + List realOriginalList = new ArrayList(); // 최초의 원본리스트 + List originalList = new ArrayList(); // 직전리스트는 주기적으로 직전목록정보로 갱신된다. + List currentList = new ArrayList(); // 직전리스트와 비교할 현시점 리스트 + List changedList = new ArrayList(); // 직전리스트와 비교한 시점에 발생된 변경리스트 + List totalChangedList = new ArrayList(); // 최초리스트와 비교한 변경 리스트 + // totalChangedList는 필요시 checkAndConfigure함수 내에서 주석해제후 사용(부하량을 고려하여 사용) + int cnt = 0; + + /** + *

    + * 감시 하고자 하는 파일명을 파라메타로 받는 기본 컨스트럭터(Constructor). + *

    + * + * @param filename + */ + protected EgovFileMntrg(String filename, File logFile) { + //log.debug("EgovFileMntrg start"); + this.logFile = logFile; + this.filename = filename; + file = new File(filename); + // 1. 최초생성시 현재 디렉토리의 하위정보를 ArrayList에 보관한다. 보관정보 ==> 절대경로 + "," + 최종수정일시 + "," + 사이즈 + File[] fList = file.listFiles(); + //2017.03.06 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476] + if(fList == null){ + fList = new File[0]; + } + for (int i = 0; i < fList.length; i++) { + realOriginalList.add(fList[i].getAbsolutePath() + "$" + getLastModifiedTime(fList[i]) + "$" + ((fList[i].length() / 1024) > 0 ? (fList[i].length() / 1024) : 1) + "KB"); + writeLog("ORI_" + fList[i].getAbsolutePath() + "$" + getLastModifiedTime(fList[i]) + "$" + ((fList[i].length() / 1024) > 0 ? (fList[i].length() / 1024) : 1) + "KB"); + } + + originalList = new ArrayList(realOriginalList); + writeLog("START"); + setDaemon(true); + checkAndConfigure(); + //log.debug("EgovFileMntrg end"); + } + + /** + *

    + * 감시 하고자 하는 파일의 변경 유무를 체크 하고자 하는 delay 초를 set. + *

    + * + * @param delay 감시 주기 초 + */ + public void setDelay(long delay) { + this.delay = delay; + } + + /** + *

    + * 해당 파일의 변경시 작업 할 내용을 기술 할 추상(abstract) 메소드 + *

    + */ + //abstract protected void doOnChange(); + protected void doOnChange(List changedList) { + //log.debug("doOnChange() start"); + for (int i = 0; i < changedList.size(); i++) { + writeLog((String) changedList.get(i)); + } + changedList.clear(); //직전리스트와 비교해서 변경된 내역은 로그처리한 후 초기화한다. + originalList = new ArrayList(currentList); //현재리스트가 직전리스트가 된다.(새로 생성해야 함!) + cnt++; + + //log.debug("doOnChange() end"); + } + + /** + *

    + * 파일의 변경 유무를 체크하는 메소드 + *

    + */ + protected void checkAndConfigure() { + //log.debug("checkAndConfigure start"); + try { + currentList.clear(); + file = new File(filename); + // 현재정보를 ArrayList에 담는다. + File[] fList = file.listFiles(); + //2017.03.06 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476] + if(fList == null){ + fList = new File[0]; + } + + for (int i = 0; i < fList.length; i++) { + currentList.add(fList[i].getAbsolutePath() + "$" + getLastModifiedTime(fList[i]) + "$" + ((fList[i].length() / 1024) > 0 ? (fList[i].length() / 1024) : 1) + "KB"); + } + /* + for(int i = 0; i 0) { + //log.debug("change occur , changed file check count:"+cnt+ " , changed file count:"+changedList.size()); + doOnChange(changedList); + } + + if (isEnd()) { + //log.debug("Thread Process END !!! (CNT :"+cnt+")"); + interrupted = true; + } + //log.debug("checkAndConfigure end"+changedList.size()); + } + + /** + *

    + * 파일의 변경 유무의 체크를 주기적 초 단위로 실행 시키는 메소드 + *

    + */ + public void run() { + while (!interrupted) { + try { + Thread.sleep(delay); + } catch (InterruptedException e) { + EgovBasicLogger.ignore("Interrupted Exception", e); + } + checkAndConfigure(); + } + if (interrupted) { + this.interrupt(); + } + } + + /** + *
    +	 * Comment : 디렉토리(파일)의 최종 수정시간를 확인한다.(기본로케일 java.util.Locale.KOREA 기준)
    +	 * 
    + * @param File f 수정일자를 확인할 대상파일 + * @return String result 최종수정일자를 문자열로 리턴한다. + */ + public static String getLastModifiedTime(File f) { + long date = f.lastModified(); + java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyyMMdd:HH:mm:ss", java.util.Locale.KOREA); + return dateFormat.format(new java.util.Date(date)); + } + + /** + *
    +	 * Comment : 디렉토리(파일)의  로그정보를 기록한다.
    +	 * 
    + * @param String logStr 추가할 로그정보(라인단위) + * @return boolean result 로그추가 성공여부 + */ + public boolean writeLog(String logStr) { + boolean result = false; + + FileWriter fWriter = null; + BufferedWriter bWriter = null; + BufferedReader br = null; + try { + fWriter = new FileWriter(logFile, true); + bWriter = new BufferedWriter(fWriter); + br = new BufferedReader(new StringReader(logStr)); + String line = ""; + while ((line = br.readLine()) != null) { + if (line.length() <= MAX_STR_LEN) { + bWriter.write(line + "\n", 0, line.length() + 1); + } + } + result = true; + } catch (IOException e) { + throw new RuntimeException("File IO exception", e); + } finally { + EgovResourceCloseHelper.close(br, bWriter, fWriter); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리감시 종료여부를 확인한다. 해당 디렉토리에 대한 로그파일이 삭제된 경우는 감시를 종료한다.
    +	 * 
    + * @return boolean isEnd 감시종료여부 중단하려면 true 리턴, 계속하려면 false 리턴 + */ + public boolean isEnd() { + //log.debug("isEnd start"); + boolean isEnd = false; + String lastStr = ""; + BufferedReader br = null; + FileReader fr = null; + + try { + if (logFile.exists()) { + //로그파일을 읽어서 마지막 끝에 END가 있으면 종료된것임 + + fr = new FileReader(logFile); + br = new BufferedReader(fr); + //int ch = 0; + String line = ""; + while ((line = br.readLine()) != null) { + if (line.length() <= MAX_STR_LEN) { + lastStr = line; + } + } + if (lastStr.equals("END")) { + isEnd = true; + } + } else { + //로그파일이 없는 경우(삭제된 경우)도 종료한다. + isEnd = true; + } + } catch (IOException e) { + throw new RuntimeException("File IO exception", e); + } finally { + EgovResourceCloseHelper.close(br, fr); + } + return isEnd; + } +} diff --git a/src/main/java/egovframework/com/utl/sim/service/EgovFileScrty.java b/src/main/java/egovframework/com/utl/sim/service/EgovFileScrty.java new file mode 100644 index 0000000..a227f60 --- /dev/null +++ b/src/main/java/egovframework/com/utl/sim/service/EgovFileScrty.java @@ -0,0 +1,307 @@ +/** + * Class Name : EgovFileScrty.java + * Description : Base64인코딩/디코딩 방식을 이용한 데이터를 암호화/복호화하는 Business Interface class + * Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.02.04 박지욱 최초 생성 + * 2017.02.07 이정은 시큐어코딩(ES)-솔트 없이 일방향 해쉬함수 사용[CWE-759] + * + * @author 공통 서비스 개발팀 박지욱 + * @since 2009. 02. 04 + * @version 1.0 + * @see + * + * Copyright (C) 2009 by MOPAS All right reserved. + */ +package egovframework.com.utl.sim.service; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.security.MessageDigest; +import java.security.SecureRandom; + +import egovframework.com.cmm.util.EgovResourceCloseHelper; + +import org.apache.commons.codec.binary.Base64; + +public class EgovFileScrty { + + // 파일구분자 + static final char FILE_SEPARATOR = File.separatorChar; + + static final int BUFFER_SIZE = 1024; + + /** + * 파일을 암호화하는 기능 + * + * @param String source 암호화할 파일 + * @param String target 암호화된 파일 + * @return boolean result 암호화여부 True/False + * @exception Exception + */ + public static boolean encryptFile(String source, String target) throws IOException { + + // 암호화 여부 + boolean result = false; + + String sourceFile = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + String targetFile = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcFile = new File(sourceFile); + + BufferedInputStream input = null; + BufferedOutputStream output = null; + + byte[] buffer = new byte[BUFFER_SIZE]; + + try { + if (srcFile.exists() && srcFile.isFile()) { + + input = new BufferedInputStream(new FileInputStream(srcFile)); + output = new BufferedOutputStream(new FileOutputStream(targetFile)); + + int length = 0; + while ((length = input.read(buffer)) >= 0) { + byte[] data = new byte[length]; + System.arraycopy(buffer, 0, data, 0, length); + output.write(encodeBinary(data).getBytes()); + output.write(System.getProperty("line.separator").getBytes()); + } + result = true; + } + } finally { + EgovResourceCloseHelper.close(input, output); + } + + return result; + } + + /** + * 파일을 복호화하는 기능 + * + * @param String source 복호화할 파일 + * @param String target 복호화된 파일 + * @return boolean result 복호화여부 True/False + * @exception Exception + */ + public static boolean decryptFile(String source, String target) throws IOException { + + // 복호화 여부 + boolean result = false; + + String sourceFile = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + String targetFile = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcFile = new File(sourceFile); + + BufferedReader input = null; + BufferedOutputStream output = null; + + //byte[] buffer = new byte[BUFFER_SIZE]; + String line = null; + + try { + if (srcFile.exists() && srcFile.isFile()) { + + input = new BufferedReader(new InputStreamReader(new FileInputStream(srcFile))); + output = new BufferedOutputStream(new FileOutputStream(targetFile)); + + while ((line = input.readLine()) != null) { + byte[] data = line.getBytes(); + output.write(decodeBinary(new String(data))); + } + + result = true; + } + } finally { + EgovResourceCloseHelper.close(input, output); + } + + return result; + } + + /** + * 데이터를 암호화하는 기능 + * + * @param byte[] data 암호화할 데이터 + * @return String result 암호화된 데이터 + * @exception Exception + */ + public static String encodeBinary(byte[] data) throws IOException, RuntimeException { + if (data == null) { + return ""; + } + + return new String(Base64.encodeBase64(data)); + } + + /** + * 데이터를 암호화하는 기능 + * + * @param String data 암호화할 데이터 + * @return String result 암호화된 데이터 + * @exception Exception + */ + @Deprecated + public static String encode(String data) throws Exception { + return encodeBinary(data.getBytes()); + } + + /** + * 데이터를 복호화하는 기능 + * + * @param String data 복호화할 데이터 + * @return String result 복호화된 데이터 + * @exception Exception + */ + public static byte[] decodeBinary(String data) throws IOException, RuntimeException { + return Base64.decodeBase64(data.getBytes()); + } + + /** + * 데이터를 복호화하는 기능 + * + * @param String data 복호화할 데이터 + * @return String result 복호화된 데이터 + * @exception Exception + */ + @Deprecated + public static String decode(String data) throws Exception { + return new String(decodeBinary(data)); + } + + /** + * 비밀번호를 암호화하는 기능(복호화가 되면 안되므로 SHA-256 인코딩 방식 적용). + * + * deprecated : 보안 강화를 위하여 salt로 ID를 지정하는 encryptPassword(password, id) 사용 + * + * @param String data 암호화할 비밀번호 + * @return String result 암호화된 비밀번호 + * @exception Exception + */ + @Deprecated + public static String encryptPassword(String data) throws Exception { + + if (data == null) { + return ""; + } + + byte[] plainText = null; // 평문 + byte[] hashValue = null; // 해쉬값 + plainText = data.getBytes(); + + MessageDigest md = MessageDigest.getInstance("SHA-256"); + + //2017.02.07 이정은 시큐어코딩(ES)-솔트 없이 일방향 해쉬함수 사용[CWE-759] + // 변경 시 기존 hash 값에 검증 불가.. => deprecated 시키고 유지 + // Random 방식의 salt 추가 + SecureRandom ng = new SecureRandom(); + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + + md.reset(); + md.update(randomBytes); + + + hashValue = md.digest(plainText); + + /* + BASE64Encoder encoder = new BASE64Encoder(); + return encoder.encode(hashValue); + */ + return new String(Base64.encodeBase64(hashValue)); + } + + /** + * 비밀번호를 암호화하는 기능(복호화가 되면 안되므로 SHA-256 인코딩 방식 적용) + * + * @param password 암호화될 패스워드 + * @param id salt로 사용될 사용자 ID 지정 + * @return + * @throws Exception + */ + public static String encryptPassword(String password, String id) throws Exception { + + if (password == null) { + return ""; + } + + byte[] hashValue = null; // 해쉬값 + + MessageDigest md = MessageDigest.getInstance("SHA-256"); + + md.reset(); + md.update(id.getBytes()); + + hashValue = md.digest(password.getBytes()); + + return new String(Base64.encodeBase64(hashValue)); + } + + /** + * 비밀번호를 암호화하는 기능(복호화가 되면 안되므로 SHA-256 인코딩 방식 적용) + * @param data 암호화할 비밀번호 + * @param salt Salt + * @return 암호화된 비밀번호 + * @throws Exception + */ + public static String encryptPassword(String data, byte[] salt) throws Exception { + + if (data == null) { + return ""; + } + + byte[] hashValue = null; // 해쉬값 + + MessageDigest md = MessageDigest.getInstance("SHA-256"); + + md.reset(); + md.update(salt); + + hashValue = md.digest(data.getBytes()); + + return new String(Base64.encodeBase64(hashValue)); + } + + /** + * 비밀번호를 암호화된 패스워드 검증(salt가 사용된 경우만 적용). + * + * @param data 원 패스워드 + * @param encoded 해쉬처리된 패스워드(Base64 인코딩) + * @return + * @throws Exception + */ + public static boolean checkPassword(String data, String encoded, byte[] salt) throws Exception { + byte[] hashValue = null; // 해쉬값 + + MessageDigest md = MessageDigest.getInstance("SHA-256"); + + md.reset(); + md.update(salt); + hashValue = md.digest(data.getBytes()); + + return MessageDigest.isEqual(hashValue, Base64.decodeBase64(encoded.getBytes())); + } + + /* + public static void main(String[] args) { + try { + String password = "abc"; + String salt = "def"; + + String first = encryptPassword(password, salt.getBytes()); + String second = encryptPassword(password, salt.getBytes()); + System.out.println(password + " => " + first + " : " + checkPassword(password, first, salt.getBytes())); + System.out.println(password + " => " + second + " : " + checkPassword(password, second, salt.getBytes())); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + */ +} diff --git a/src/main/java/egovframework/com/utl/sim/service/EgovFileTool.java b/src/main/java/egovframework/com/utl/sim/service/EgovFileTool.java new file mode 100644 index 0000000..fc6f5bb --- /dev/null +++ b/src/main/java/egovframework/com/utl/sim/service/EgovFileTool.java @@ -0,0 +1,3034 @@ +/** + * Class Name : EgovFileTool.java + * Description : 시스템 디렉토리 정보를 확인하여 제공하는 Business class + * Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.01.13 조재영 최초 생성 + * 2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754] + * 2017.03.03 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476] + * 2018.03.19 신용호 createDirectories() 추가 : 여러 레벨의 디렉토리를 한번에 생성 + * + * + * @author 공통 서비스 개발팀 조재영,박지욱 + * @since 2009. 01. 13 + * @version 1.0 + * @see + * + * Copyright (C) 2009 by MOPAS All right reserved. + */ +package egovframework.com.utl.sim.service; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.StringReader; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Vector; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import egovframework.com.cmm.EgovWebUtil; +import egovframework.com.cmm.service.EgovProperties; +import egovframework.com.cmm.service.Globals; +import egovframework.com.cmm.util.EgovResourceCloseHelper; +import egovframework.com.utl.fcc.service.EgovStringUtil; + +public class EgovFileTool { + + // 파일사이즈 1K + static final long BUFFER_SIZE = 1024L; + // 파일구분자 + static final char FILE_SEPARATOR = File.separatorChar; + // 윈도우시스템 파일 접근권한 + static final char ACCESS_READ = 'R'; // 읽기전용 + static final char ACCESS_SYS = 'S'; // 시스템 + static final char ACCESS_HIDE = 'H'; // 숨김 + // 최대 문자길이 + static final int MAX_STR_LEN = 1024; + + // LOGGER + private static final Logger LOGGER = LoggerFactory.getLogger(EgovFileTool.class); + + /** + *
    +	 * Comment : 디렉토리 존재여부를 확인한다. (단일디렉토리 확인용)
    +	 * 
    + * + * @param String targetDirPath 존재여부를 확인할 디렉토리의 절대경로 + * @return String result 존재하는 디렉토리 경로를 리턴한다. + */ + public static boolean getExistDirectory(String targetDirPath) throws Exception { + + // 인자값 유효하지 않은 경우 공백 리턴 + if (targetDirPath == null || targetDirPath.equals("")) { + return false; + } + + boolean result = false; + File f = new File(EgovWebUtil.filePathBlackList(targetDirPath)); + if (f.exists() && f.isDirectory()) { + result = true; + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리 존재여부를 확인한다. (하위디렉토리 확인용)
    +	 * 
    + * + * @param String baseDirPath 존재여부를 확인할 디렉토리명의 기준경로 + * @param String targetDirPath 확인할 대상 디렉토리. baseDirPath 하위에서 존재여부를 확인한다. + * @param int cnt 확인할 디렉토리 갯수 (0보다 큰값이 입력되어야 한다. -1 입력시 21474846까지 찾도록 지원함 ) + * @return String result 존재하는 디렉토리 경로를 리턴한다. + */ + public static List getExistDirectory(String baseDirPath, String targetDirPath, int cnt) throws Exception { + + // 인자값 유효하지 않은 경우 빈 ArrayList 리턴 + if (baseDirPath == null || baseDirPath.equals("") || targetDirPath == null || targetDirPath.equals("") || cnt == 0) { + return new ArrayList(); + } + int dirCnt = 0; + if (cnt < 0) { + dirCnt = 21474846; + } else { + dirCnt = cnt; + } + + // 찾은 결과를 전달할 ArrayList + List result = new ArrayList(); + // 하위의 결과를 임시 보관할 ArrayList + List subResult = new ArrayList(); + // 현재경로(baseDirPath)에서 발견된 targetDirPath 갯수 + int dirFindCnt = 0; + boolean isExist = false; + String[] dirList = null; + String subDirPath = ""; + File f = null; + + f = new File(EgovWebUtil.filePathBlackList(baseDirPath)); + isExist = f.exists(); + + if (isExist) { + dirList = f.list(); + } + + for (int i = 0; dirList != null && i < dirList.length; i++) { + //log.debug("dirList["+i+"]:"+dirList[i] +"--->"+baseDirPath+"/"+dirList[i]); + subDirPath = baseDirPath + "/" + dirList[i]; + //log.debug("_"+targetDirPath+"_"); + //log.debug("_"+dirList[i]+"_"); + + f = new File(EgovWebUtil.filePathBlackList(subDirPath)); + + //현재경로(baseDirPath)에서 검색 + if (targetDirPath.equals(dirList[i])) { + // 중간에 발견하면 반복체크는 종료한다.(결과요청 갯수에 도달한 경우에 한해) - 이곳에서 종료되면 이후 하위에서 체크할 필요가 없다. + if (new File(EgovWebUtil.filePathBlackList(baseDirPath) + "/" + dirList[i]).isDirectory()) { + dirFindCnt++; + result.add(baseDirPath + "/" + dirList[i]); + if (dirFindCnt == dirCnt) { + break; + } + } + } + + //현재경로(baseDirPath)에서 발견된 하위 경로에서 반복하여 재귀적으로 검색 + int subCnt = dirCnt - dirFindCnt; + if (f.isDirectory()) { + //log.debug("f.isDirectory():"+f.isDirectory()); + subResult = getExistDirectory(subDirPath, targetDirPath, subCnt); + // 하위에서 발견된 디렉토리 갯수를 현재까지 찾은 디렉토리갯수에 추가한다. + dirFindCnt = dirFindCnt + subResult.size(); + // 하위에서 모두 발견된 경우 반복 체크는 종료한다. + if (dirCnt <= dirFindCnt) { + for (int j = 0; j < subResult.size(); j++) { + result.add((String) subResult.get(j)); + } + + break; + } else { + for (int j = 0; j < subResult.size(); j++) { + result.add((String) subResult.get(j)); + } + } + } + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리 존재여부를 확인한다. (생성일자를 조건으로 조건구간내 포함되는지 확인)
    +	 * 
    + * + * @param String targetDirPath 존재여부를 확인할 디렉토리의 절대경로 + * @param String fromDate 생성일자 조건에 해당하는 시작일자(YYYYMMDD 형태로 입력) + * @param String toDate 생성일자 조건에 해당하는 종료일자(YYYYMMDD 형태로 입력) + * @return String result 존재하는 디렉토리 경로를 리턴한다. + */ + public static boolean getExistDirectory(String targetDirPath, String fromDate, String toDate) throws Exception { + + // 인자값 유효하지 않은 경우 공백 리턴 + if (targetDirPath == null || targetDirPath.equals("") || fromDate == null || fromDate.equals("") || toDate == null || toDate.equals("")) { + return false; + } + + boolean result = false; + String lastModifyedDate = ""; + File f = null; + + f = new File(EgovWebUtil.filePathBlackList(targetDirPath)); + lastModifyedDate = getLastModifiedDateFromFile(f); + //log.debug("getLastModifiedDateFromFile(f):"+lastModifyedDate); + if (Integer.parseInt(lastModifyedDate) >= Integer.parseInt(fromDate) && Integer.parseInt(lastModifyedDate) <= Integer.parseInt(toDate)) { + result = true; + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리 존재여부를 확인한다. (생성자를 조건으로 일치하는지 확인)
    +	 * 
    + * + * @param String targetDirPath 존재여부를 확인할 디렉토리의 절대경로 + * @param String ownerName 생성자명(계정정보) + * @return String result 존재하는 디렉토리 경로를 리턴한다. + */ + public static boolean getExistDirectory(String targetDirPath, String ownerName) throws Exception { + + // 인자값 유효하지 않은 경우 공백 리턴 + if (targetDirPath == null || targetDirPath.equals("") || ownerName == null || ownerName.equals("")) { + return false; + } + + boolean result = false; + //String tmp = ""; + + // 실행할 명령을 프로퍼티 파일에서 확인한다. + //Process p = null; + + String realOwner = getOwner(targetDirPath); + if (ownerName.equals(realOwner)) { + result = true; + } else { + result = false; + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리(파일)의 최종 수정일자를 확인한다. (기본로케일 java.util.Locale.KOREA 기준)
    +	 * 
    + * + * @param File f 수정일자를 확인할 대상파일 + * @return String result 최종수정일자를 문자열로 리턴한다. + */ + public static String getLastModifiedDateFromFile(File f) { + + String result = ""; + + if (f.exists()) { + long date = f.lastModified(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd", java.util.Locale.KOREA); + result = dateFormat.format(new java.util.Date(date)); + } else { + result = ""; + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리(파일)의 최종 수정일자를 확인한다. (기본로케일 java.util.Locale.KOREA 기준)
    +	 * 
    + * + * @param String filePath 수정일자를 확인할 대상파일경로 + * @return String result 최종수정일자를 문자열로 리턴한다. + */ + public static String getLastModifiedDateFromFile(String filePath) { + + File f = null; + String result = ""; + f = new File(EgovWebUtil.filePathBlackList(filePath)); + result = getLastModifiedDateFromFile(f); + + return result; + } + + /** + *
    +	 * Comment : 조건구간내에 생성된 디렉토리 목록을 조회한다.
    +	 * 
    + * + * @param String filePath 하위디렉토리를 확인할 경로 + * @param String fromDate 조건시작일 + * @param String toDate 조건 종료일 + * @return ArrayList result 조건구간내에 생성된 디렉토리 목록을 리턴한다. + */ + public static List getLastDirectoryForModifiedDate(String baseDirPath, String fromDate, String toDate) { + + // 인자값 유효하지 않은 경우 빈 ArrayList 리턴 + if (baseDirPath == null || baseDirPath.equals("") || fromDate == null || fromDate.equals("") || toDate == null || toDate.equals("")) { + return new ArrayList(); + } + + File f = null; + File childFile = null; + String[] subDirList; + String subDirPath = ""; + List childResult = null; + List result = new ArrayList(); + + f = new File(EgovWebUtil.filePathBlackList(baseDirPath)); + subDirList = f.list(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (subDirList != null) { + for (int i = 0; i < subDirList.length; i++) { + + subDirPath = baseDirPath + "/" + subDirList[i]; + childFile = new File(EgovWebUtil.filePathBlackList(subDirPath)); + if (childFile.isDirectory()) { + //childResult = getLastDirectoryForModifiedDate(subDirPath , fromDate, toDate); + String lastModifyedDate = getLastModifiedDateFromFile(childFile); + if (Integer.parseInt(lastModifyedDate) >= Integer.parseInt(fromDate) && Integer.parseInt(lastModifyedDate) <= Integer.parseInt(toDate)) { + result.add(baseDirPath + "/" + subDirList[i]); + } + childResult = getLastDirectoryForModifiedDate(baseDirPath + "/" + subDirList[i], fromDate, toDate); + // 하위디렉토리의 결과를 추가한다. + for (int j = 0; j < childResult.size(); j++) { + result.add((String) childResult.get(j)); + } + } + } + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리(파일)의 읽기권한을 확인한다.
    +	 * 
    + * + * @param String filePath 읽기권한을 확인할 대상파일경로 + * @return boolean result 읽기가능하면 true를 리턴한다. 권한이 없어가 파일이 없는 경우는 false를 리턴한다. + */ + public static boolean canRead(String filePath) { + + // 인자값 유효하지 않은 경우 빈 false 리턴 + if (filePath == null || filePath.equals("")) { + return false; + } + + File f = null; + boolean result = false; + f = new File(EgovWebUtil.filePathBlackList(filePath)); + if (f.exists()) { + result = f.canRead(); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리(파일)의 쓰기권한을 확인한다.(대상경로가 파일인 경우만 정보가 유효함)
    +	 * 
    + * + * @param String filePath 쓰기권한을 확인할 대상파일경로 + * @return boolean result 쓰기가능하면 true를 리턴한다. 권한이 없어가 파일이 없는 경우는 false를 리턴한다. + */ + public static boolean canWrite(String filePath) { + + // 인자값 유효하지 않은 경우 빈 false 리턴 + if (filePath == null || filePath.equals("")) { + return false; + } + + File f = null; + boolean result = false; + f = new File(EgovWebUtil.filePathBlackList(filePath)); + if (f.exists()) { + result = f.canWrite(); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리(파일)의 이름을  확인한다.
    +	 * 
    + * + * @param String filePath 이름을 확인할 대상경로 + * @return String result 이름을 리턴한다. 존재하지 않는 경우는 블랭크를 리턴한다. + */ + public static String getName(String filePath) { + + // 인자값 유효하지 않은 경우 빈 false 리턴 + if (filePath == null || filePath.equals("")) { + return ""; + } + + File f = null; + String result = ""; + + f = new File(EgovWebUtil.filePathBlackList(filePath)); + if (f.exists()) { + result = f.getName(); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리(파일)를 삭제한다. (파일,디렉토리 구분없이 존재하는 경우 무조건 삭제한다)
    +	 * 
    + * + * @param filePathToBeDeleted 삭제하고자 하는 파일의 절대경로 + 파일명 + * @return 성공하면 삭제된 절대경로, 아니면블랭크 + */ + + public static String deletePath(String filePath) { + File file = new File(EgovWebUtil.filePathBlackList(filePath)); + String result = ""; + + if (file.exists()) { + result = file.getAbsolutePath(); + if (!file.delete()) { + result = ""; + } + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리를 생성한다.
    +	 * 
    + * + * @param dirPath 생성하고자 하는 절대경로 + * @return 성공하면 생성된 절대경로, 아니면 블랭크 + */ + + public static String createDirectory(String dirPath) { + File file = new File(EgovWebUtil.filePathBlackList(dirPath)); + String result = ""; + try { + if (!file.exists()) { + //2017.02.08 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754] + if(file.createNewFile()){ + LOGGER.debug("[file.createNewFile] file : Path Creation Success"); + }else{ + LOGGER.error("[file.createNewFile] file : Path Creation Fail"); + } + file.getAbsolutePath(); + } + + } catch (IOException e) { + throw new RuntimeException(e); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리를 생성한다. (여러 레벨의 경로를 동시에 생성)
    +	 * 
    + * + * @param dirPath 생성하고자 하는 절대경로 + * @return 성공하면 생성된 절대경로, 아니면 블랭크 + */ + public static String createDirectories(String dirPath) { + File file = new File(EgovWebUtil.filePathBlackList(dirPath)); + String result = ""; + + if (!file.exists()) { + if(file.mkdirs()) { + LOGGER.debug("[file.mkdirs] file : Path Creation Success"); + }else{ + LOGGER.error("[file.mkdirs] file : Path Creation Fail"); + } + file.getAbsolutePath(); + } + + return result; + } + + /** + * 디렉토리에 파일이 존재하는지 체크하는 기능 + * + * @param String dir 디렉토리 + * @param String file 파일 + * @return boolean result 존재여부 True / False + * @exception Exception + */ + public static boolean checkFileExstByName(String dir, String file) throws Exception { + + // 파일 존재 여부 + boolean result = false; + + // 디렉토리 오픈 + String drctry = dir.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcDrctry = new File(EgovWebUtil.filePathBlackList(drctry)); + + // 디렉토리이면서, 존재하면 + if (srcDrctry.exists() && srcDrctry.isDirectory()) { + + // 디렉토리 안 목록을 조회한다. (파일명) + File[] fileArray = srcDrctry.listFiles(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (fileArray != null) { + List list = getSubFilesByName(fileArray, file); + if (list != null && list.size() > 0) { + result = true; + } + } + } + + return result; + } + + /** + * 확장자별로 디렉토리에 파일이 존재하는지 체크하는 기능 + * + * @param String dir 디렉토리 + * @param String eventn 확장자명(.txt 형태 입력) + * @return boolean result 존재여부 True / False + * @exception Exception + */ + public static boolean checkFileExstByExtnt(String dir, String eventn) throws Exception { + + // 파일 존재 여부 + boolean result = false; + + // 디렉토리 오픈 + String drctry = dir.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcDrctry = new File(EgovWebUtil.filePathBlackList(drctry)); + + // 디렉토리이면서, 존재하면 + if (srcDrctry.exists() && srcDrctry.isDirectory()) { + + // 디렉토리 안 목록을 조회한다. (확장자별) + File[] fileArray = srcDrctry.listFiles(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (fileArray != null) { + List list = getSubFilesByExtnt(fileArray, eventn); + if (list != null && list.size() > 0) { + result = true; + } + } + } + + return result; + } + + /** + * 디렉토리에 생성자별 파일이 존재하는지 체크하는 기능 + * + * @param String dir 디렉토리 + * @param String owner 생성자 + * @return boolean result 존재여부 True / False + * @exception Exception + */ + public static boolean checkFileExstByOwner(String dir, String owner) throws Exception { + + // 파일 존재 여부 + boolean result = false; + + // 디렉토리 오픈 + String drctry = dir.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcDrctry = new File(EgovWebUtil.filePathBlackList(drctry)); + + // 디렉토리이면서, 존재하면 + if (srcDrctry.exists() && srcDrctry.isDirectory()) { + + // 디렉토리 안 목록을 조회한다. (생성자) + File[] fileArray = srcDrctry.listFiles(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (fileArray != null) { + List list = getSubFilesByOwner(fileArray, owner); + if (list != null && list.size() > 0) { + result = true; + } + } + } + + return result; + } + + /** + * 수정기간별로 디렉토리에 파일이 존재하는지 체크하는 기능 + * + * @param String dir 디렉토리 + * @param String updtFrom 수정일자From(YYYYMMDD 형태로 입력) + * @param String updtTo 수정일자To(YYYYMMDD 형태로 입력) + * @return boolean result 존재여부 True / False + * @exception Exception + */ + public static boolean checkFileExstByUpdtPd(String dir, String updtFrom, String updtTo) throws Exception { + + // 파일 존재 여부 + boolean result = false; + + // 디렉토리 오픈 + String drctry = dir.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcDrctry = new File(EgovWebUtil.filePathBlackList(drctry)); + + // 디렉토리이면서, 존재하면 + if (srcDrctry.exists() && srcDrctry.isDirectory()) { + + // 디렉토리 안 목록을 조회한다. (수정기간별) + File[] fileArray = srcDrctry.listFiles(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (fileArray != null) { + List list = getSubFilesByUpdtPd(fileArray, updtFrom, updtTo); + if (list != null && list.size() > 0) { + result = true; + } + } + } + + return result; + } + + /** + * 사이즈별로 디렉토리에 파일이 존재하는지 체크하는 기능 + * + * @param String dir 디렉토리 + * @param long sizeFrom 사이즈From (KB) + * @param long sizeTo 사이즈To (KB) + * @return boolean result 존재여부 True / False + * @exception Exception + */ + public static boolean checkFileExstBySize(String dir, long sizeFrom, long sizeTo) throws Exception { + + // 파일 존재 여부 + boolean result = false; + + // 디렉토리 오픈 + String drctry = dir.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcDrctry = new File(EgovWebUtil.filePathBlackList(drctry)); + + // 디렉토리이면서, 존재하면 + if (srcDrctry.exists() && srcDrctry.isDirectory()) { + + // 디렉토리 안 목록을 조회한다. (사이즈별) + File[] fileArray = srcDrctry.listFiles(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (fileArray != null) { + List list = getSubFilesBySize(fileArray, sizeFrom, sizeTo); + if (list != null && list.size() > 0) { + result = true; + } + } + } + + return result; + } + + /** + * 디렉토리 내부 하위목록들 중에서 파일을 찾는 기능(모든 목록 조회) + * + * @param File[] fileArray 파일목록 + * @return ArrayList list 파일목록(절대경로) + * @exception Exception + */ + public static List getSubFilesByAll(File[] fileArray) throws Exception { + + ArrayList list = new ArrayList(); + + for (int i = 0; i < fileArray.length; i++) { + // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다. + if (fileArray[i].isDirectory()) { + File[] tmpArray = fileArray[i].listFiles(); + list.addAll(getSubFilesByAll(tmpArray)); + // 파일이면 담는다. + } else { + list.add(fileArray[i].getAbsolutePath()); + } + } + + return list; + } + + /** + * 디렉토리 내부 하위목록들 중에서 파일을 찾는 기능(파일명) + * + * @param File[] fileArray 파일목록 + * @param String file 파일명 + * @return ArrayList list 파일목록(절대경로) + * @exception Exception + */ + public static List getSubFilesByName(File[] fileArray, String file) throws Exception { + + List list = new ArrayList(); + + for (int i = 0; i < fileArray.length; i++) { + // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다. + if (fileArray[i].isDirectory()) { + File[] tmpArray = fileArray[i].listFiles(); + list.addAll(getSubFilesByName(tmpArray, file)); + // 파일이면 파일명이 같은지 비교한다. + } else { + if (fileArray[i].getName().equals(file)) { + list.add(fileArray[i].getAbsolutePath()); + } + } + } + + return list; + } + + /** + * 디렉토리 내부 하위목록들 중에서 파일을 찾는 기능(확장자별) + * + * @param File[] fileArray 파일목록 + * @param String extnt 확장자 + * @return ArrayList list 파일목록(절대경로) + * @exception Exception + */ + public static List getSubFilesByExtnt(File[] fileArray, String extnt) throws Exception { + + List list = new ArrayList(); + + for (int i = 0; i < fileArray.length; i++) { + // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다. + if (fileArray[i].isDirectory()) { + File[] tmpArray = fileArray[i].listFiles(); + list.addAll(getSubFilesByExtnt(tmpArray, extnt)); + // 파일이면 확장자명이 들어있는지 비교한다. + } else { + if (fileArray[i].getName().indexOf(extnt) != -1) { + list.add(fileArray[i].getAbsolutePath()); + } + } + } + + return list; + } + + /** + * 디렉토리 내부 하위목록들 중에서 파일을 찾는 기능(최종수정기간별) + * + * @param File[] fileArray 파일목록 + * @param String updtFrom 수정일자From(YYYYMMDD 형태로 입력) + * @param String updtTo 수정일자To(YYYYMMDD 형태로 입력) + * @return ArrayList list 파일목록(절대경로) + * @exception Exception + */ + public static List getSubFilesByUpdtPd(File[] fileArray, String updtFrom, String updtTo) throws Exception { + + List list = new ArrayList(); + + for (int i = 0; i < fileArray.length; i++) { + // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다. + if (fileArray[i].isDirectory()) { + File[] tmpArray = fileArray[i].listFiles(); + list.addAll(getSubFilesByUpdtPd(tmpArray, updtFrom, updtTo)); + // 파일이면 수정기간내에 존재하는지 비교한다. + } else { + // 파일의 최종수정일자 조회 + long date = fileArray[i].lastModified(); + java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyyMMdd", java.util.Locale.KOREA); + String lastUpdtDate = dateFormat.format(new java.util.Date(date)); + // 수정기간 내에 존재하는지 확인 + if (Integer.parseInt(lastUpdtDate) >= Integer.parseInt(updtFrom) && Integer.parseInt(lastUpdtDate) <= Integer.parseInt(updtTo)) { + list.add(fileArray[i].getAbsolutePath()); + } + } + } + + return list; + } + + /** + * 디렉토리 내부 하위목록들 중에서 파일을 찾는 기능(사이즈별) + * + * @param File[] fileArray 파일목록 + * @param long sizeFrom 사이즈From(KB) + * @param long sizeTo 사이즈To(KB) + * @return ArrayList list 파일목록(절대경로) + * @exception Exception + */ + public static List getSubFilesBySize(File[] fileArray, long sizeFrom, long sizeTo) throws Exception { + + List list = new ArrayList(); + + for (int i = 0; i < fileArray.length; i++) { + // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다. + if (fileArray[i].isDirectory()) { + File[] tmpArray = fileArray[i].listFiles(); + list.addAll(getSubFilesBySize(tmpArray, sizeFrom, sizeTo)); + // 파일이면, 사이즈내에 존재하는지 비교한다. + } else { + // 파일의 사이즈 조회 + long size = fileArray[i].length(); + // 사이즈 내에 존재하는지 확인 + if (size >= (sizeFrom * BUFFER_SIZE) && size <= (sizeTo * BUFFER_SIZE)) { + list.add(fileArray[i].getAbsolutePath()); + } + } + } + + return list; + } + + /** + * 디렉토리 내부 하위목록들 중에서 파일을 찾는 기능(생성자별) + * + * @param File[] fileArray 파일목록 + * @param String creator 생성자 + * @return ArrayList list 파일목록(절대경로) + * @exception Exception + */ + public static List getSubFilesByOwner(File[] fileArray, String owner) throws Exception { + + List list = new ArrayList(); + + for (int i = 0; i < fileArray.length; i++) { + // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다. + if (fileArray[i].isDirectory()) { + File[] tmpArray = fileArray[i].listFiles(); + List list1 = getSubFilesByOwner(tmpArray, owner); + if (list1 != null) + list.addAll(list1); + + // 파일이면, 생성자가 같은지 비교한다. + } else { + // 파일 생성자 조회 + String fullpath = EgovWebUtil.filePathBlackList(fileArray[i].getAbsolutePath()); + Process p = null; + if (Globals.OS_TYPE.equals("UNIX")) { + String[] command = { EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".getDrctryByOwner"), + fullpath.substring(0, fullpath.lastIndexOf("/")), fullpath.substring(fullpath.lastIndexOf("/"), fullpath.length()), owner }; + p = Runtime.getRuntime().exec(command); + p.waitFor(); + } else if (Globals.OS_TYPE.equals("WINDOWS")) { + String command = EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".getDrctryByOwner"); + p = Runtime.getRuntime().exec(command); + p.waitFor(); + } + //프로세스 에러시 종료 + if (p != null && p.exitValue() != 0) { + BufferedReader b_err = new BufferedReader(new InputStreamReader(p.getErrorStream())); + try { + while (b_err.ready()) { + //String line = b_err.readLine(); + //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line); + } + } finally { + EgovResourceCloseHelper.close(b_err); + } + } + //프로세스 실행 성공시 결과 확인 + else { + BufferedReader b_out = null; + try { + //2017.03.03 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476] + if(p != null){ + b_out = new BufferedReader(new InputStreamReader(p.getInputStream())); + while (b_out.ready()) { + // 결과문자가 있으면 생성자가 일치하는 파일이 존재한다는 의미 + String tmpStr = b_out.readLine(); + if (tmpStr != null && "".equals(tmpStr) && tmpStr.length() <= MAX_STR_LEN) { + list.add(fileArray[i].getAbsolutePath()); + } + } + } + } finally { + EgovResourceCloseHelper.close(b_out); + } + } + } + } + + return list; + } + + /** + *
    +	 * Comment : 디렉토리를 생성한다.
    +	 * 
    + * + * @param dirPath 생성하고자 하는 절대경로 + * @return 성공하면 새성된 절대경로, 아니면 블랭크 + */ + + public static String createNewDirectory(String dirPath) { + + // 인자값 유효하지 않은 경우 블랭크 리턴 + if (dirPath == null || dirPath.equals("")) { + return ""; + } + + File file = new File(EgovWebUtil.filePathBlackList(dirPath)); + String result = ""; + // 없으면 생성 + if (file.exists()) { + // 혹시 존재해도 파일이면 생성 - 생성되지 않는다.(아래는 실질적으로는 진행되지 않음) + if (file.isFile()) { + //new File(file.getParent()).mkdirs(); + if (file.mkdirs()) { + result = file.getAbsolutePath(); + } + } else { + result = file.getAbsolutePath(); + } + } else { + // 존해하지 않으면 생성 + if (file.mkdirs()) { + result = file.getAbsolutePath(); + } + } + + return result; + } + + /** + *
    +	 * Comment : 파일을 생성한다.
    +	 * 
    + * + * @param String fileName 파일의 절대경로 +파일명 + * @param String content 저장할 문자열입니다. c:/test/test1/test44.txt + * + */ + public static String createNewFile(String filePath) { + + // 인자값 유효하지 않은 경우 블랭크 리턴 + if (filePath == null || filePath.equals("")) { + return ""; + } + + File file = new File(EgovWebUtil.filePathBlackList(filePath)); + String result = ""; + try { + if (file.exists()) { + result = filePath; + } else { + // 존재하지 않으면 생성함 + //2017.02.08 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754] + if(new File(file.getParent()).mkdirs()){ + LOGGER.debug("[file.mkdirs] file : File Creation Success"); + }else{ + LOGGER.error("[file.mkdirs] file : File Creation Fail"); + } + + if (file.createNewFile()) { + result = file.getAbsolutePath(); + } + } + } catch (IOException e) { + throw new RuntimeException(e); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리를 삭제한다.
    +	 * 
    + * + * @param dirDeletePath 삭제하고자 하는디렉토리의 절대경로(파일의 경로가 들어오는 경우 삭제하지 않음) + * @return 성공하면 삭제된 절대경로, 아니면블랭크 + */ + + public static String deleteDirectory(String dirDeletePath) { + + // 인자값 유효하지 않은 경우 블랭크 리턴 + if (dirDeletePath == null || dirDeletePath.equals("")) { + return ""; + } + String result = ""; + File file = new File(EgovWebUtil.filePathBlackList(dirDeletePath)); + if (file.isDirectory()) { + String[] fileList = file.list(); + //소속된 파일을 모두 삭제 + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (fileList != null) { + for (int i = 0; i < fileList.length; i++) { + + //log.debug("fileList["+i+"] : "+ dirDeletePath +"/"+fileList[i]); + File f = new File(EgovWebUtil.filePathBlackList(dirDeletePath) + "/" + fileList[i]); + if (f.isFile()) { + //디렉토리에 속한 파일들을 모두 삭제한다. + //2017.02.08 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754] + if(f.delete()){ + LOGGER.debug("[file.delete] f : File Deletion Success"); + }else{ + LOGGER.error("[file.delete] f : File Deletion Fail"); + } + } else { + //디렉토리에 속한 하위 디렉토리들에 대한 삭제 명령을 재귀적으로 호출시킨다. + deleteDirectory(dirDeletePath + "/" + fileList[i]); + } + } + } + // 디렉토리에 속한 파일들과 하위 디렉토리가 삭제되었으면 디렉토리 자신을 삭제한다. + result = deletePath(dirDeletePath); + } else { + result = ""; + } + + return result; + } + + /** + *
    +	 * Comment : 파일을 삭제한다.
    +	 * 
    + * + * @param fileDeletePath 삭제하고자 하는파일의 절대경로 + * @return 성공하면 삭제된 파일의 절대경로, 아니면블랭크 + */ + + public static String deleteFile(String fileDeletePath) { + + // 인자값 유효하지 않은 경우 블랭크 리턴 + if (fileDeletePath == null || fileDeletePath.equals("")) { + return ""; + } + String result = ""; + File file = new File(EgovWebUtil.filePathBlackList(fileDeletePath)); + if (file.isFile()) { + result = deletePath(fileDeletePath); + } else { + result = ""; + } + + return result; + } + + /** + * 파일의 읽기권한을 체크한다. + * + * @param String file 파일 + * @return boolean result 읽기권한 True / False + * @exception Exception + */ + public static boolean checkReadAuth(String file) throws Exception { + + // 읽기가능여부 + boolean result = false; + + // 전달받은 경로를 통해 파일 인스턴스를 생성한다. + String file1 = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcFile = new File(EgovWebUtil.filePathBlackList(file1)); + + // 존재하는지 확인한다. + if (srcFile.exists()) { + // 읽기 가능한지 체크한다. + result = srcFile.canRead(); + } + + return result; + } + + /** + * 파일의 쓰기권한을 체크한다. + * + * @param String file 파일 + * @return boolean result 쓰기권한 True / False + * @exception Exception + */ + public static boolean checkWriteAuth(String file) throws Exception { + + // 쓰기가능여부 + boolean result = false; + + // 전달받은 경로를 통해 파일 인스턴스를 생성한다. + String file1 = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcFile = new File(EgovWebUtil.filePathBlackList(file1)); + + // 존재하는지 확인한다. + if (srcFile.exists()) { + // 쓰기 가능한지 체크한다. + result = srcFile.canWrite(); + } + + return result; + } + + /** + * 파일의 최종수정일자별 파일목록 조회하는 기능 + * + * @param String drctry 디렉토리 + * @param String updtDate 최종수정일자(YYYYMMDD 형태로 입력) + * @return ArrayList list 파일목록 + * @exception Exception + */ + public static List getFileListByDate(String drctry, String updtDate) throws Exception { + + // 결과 목록 + List list = null; + + // 디렉토리 오픈 + String drctry1 = drctry.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File file = new File(EgovWebUtil.filePathBlackList(drctry1)); + + // 디렉토리이며, 존재하면 최종수정일자가 같은 파일목록 조회 시작 + if (file.exists() && file.isDirectory()) { + File[] fileArray = file.listFiles(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (fileArray != null) { + list = getSubFilesByDate(fileArray, updtDate); + } + } + + return list; + } + + /** + * 파일의 최종수정기간내 파일목록 조회하는 기능 + * + * @param String drctry 디렉토리 + * @param String updtFrom 최종수정일자From(YYYYMMDD 형태로 입력) + * @param String updtTo 최종수정일자To(YYYYMMDD 형태로 입력) + * @return ArrayList list 파일목록 + * @exception Exception + */ + public static List getFileListByUpdtPd(String drctry, String updtFrom, String updtTo) throws Exception { + + // 결과 목록 + List list = null; + + // 디렉토리 오픈 + String drctry1 = drctry.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File file = new File(EgovWebUtil.filePathBlackList(drctry1)); + + // 디렉토리이며, 최종수정기간내 존재하는 파일목록 조회 시작 + if (file.exists() && file.isDirectory()) { + File[] fileArray = file.listFiles(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (fileArray != null) { + list = getSubFilesByUpdtPd(fileArray, updtFrom, updtTo); + } + } + + return list; + } + + /** + * 하위디렉토리 포함 최종수정일자가 같은 파일목록을 찾는 기능 + * + * @param File fileArray 파일목록 + * @param String updtDate 최종수정일자(YYYYMMDD 형태로 입력) + * @return ArrayList list 파일목록 + * @exception Exception + */ + public static List getSubFilesByDate(File[] fileArray, String updtDate) throws Exception { + + List list = new ArrayList(); + + for (int i = 0; i < fileArray.length; i++) { + // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다. + if (fileArray[i].isDirectory()) { + File[] tmpArray = fileArray[i].listFiles(); + list.addAll(getSubFilesByDate(tmpArray, updtDate)); + // 파일이면 파일명이 같은지 비교한다. + } else { + // 파일의 최종수정일자 조회 + long date = fileArray[i].lastModified(); + java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyyMMdd", java.util.Locale.KOREA); + String lastUpdtDate = dateFormat.format(new java.util.Date(date)); + if (Integer.parseInt(lastUpdtDate) == Integer.parseInt(updtDate)) { + list.add(fileArray[i].getAbsolutePath()); + } + } + } + + return list; + } + + /** + * 파일을 특정 구분자(',', '|', 'TAB')로 파싱하는 기능 + * + * @param String parFile 파일 + * @param String parChar 구분자(',', '|', 'TAB') + * @param int parField 필드수 + * @return Vector parResult 파싱결과 구조체 + * @exception Exception + */ + public static Vector> parsFileByChar(String parFile, String parChar, int parField) throws Exception { + + // 파싱결과 구조체 + Vector> parResult = new Vector>(); + + // 파일 오픈 + String parFile1 = parFile.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File file = new File(EgovWebUtil.filePathBlackList(parFile1)); + BufferedReader br = null; + try { + // 파일이며, 존재하면 파싱 시작 + if (file.exists() && file.isFile()) { + + // 1. 파일 텍스트 내용을 읽어서 StringBuffer에 쌓는다. + br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); + StringBuffer strBuff = new StringBuffer(); + String line = ""; + while ((line = br.readLine()) != null) { + if (line.length() < MAX_STR_LEN) + strBuff.append(line); + } + + // 2. 쌓은 내용을 특정 구분자로 파싱하여 String 배열로 얻는다. + String[] strArr = EgovStringUtil.split(strBuff.toString(), parChar); + + // 3. 필드 수 만큼 돌아가며 Vector 형태로 만든다. + int filedCnt = 1; + List arr = new ArrayList(); + for (int i = 0; i < strArr.length; i++) { + + if (parField != 1) { + if ((filedCnt % parField) == 1) { + if (strArr[i] != null) { + arr.add(strArr[i]); + } + if (i == (strArr.length - 1)) { + parResult.add(arr); + } + } else if ((filedCnt % parField) == 0) { + if (strArr[i] != null) { + arr.add(strArr[i]); + parResult.add(arr); + } + } else { + if (strArr[i] != null) { + arr.add(strArr[i]); + if (i == (strArr.length - 1)) { + parResult.add(arr); + } + } + } + } else { + arr = new ArrayList(); + if (strArr[i] != null) { + arr.add(strArr[i]); + } + parResult.add(arr); + } + + filedCnt++; + } + } + } finally { + EgovResourceCloseHelper.close(br); + } + + return parResult; + } + + /** + * 파일을 특정 구분자(',', '|', 'TAB')로 파싱하는 기능 + * + * @param String parFile 파일 + * @param String parChar 구분자(',', '|', 'TAB') + * @param int parField 필드수 + * @return Vector parResult 파싱결과 구조체 + * @exception Exception + */ + public static ArrayList parsFileByChar2(String parFile) throws Exception { + + // 파싱결과 구조체 + ArrayList parResultList = new ArrayList(); + + // 파일 오픈 + String parFile1 = parFile.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File file = new File(EgovWebUtil.filePathBlackList(parFile1)); + BufferedReader br = null; + try { + // 파일이며, 존재하면 파싱 시작 + if (file.exists() && file.isFile()) { + + // 1. 파일 텍스트 내용을 읽어서 StringBuffer에 쌓는다. + br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); + String line = ""; + while ((line = br.readLine()) != null) { + if (line.length() < MAX_STR_LEN) + parResultList.add(line); + } + } + } finally { + EgovResourceCloseHelper.close(br); + } + + return parResultList; + } + + /** + * 파일을 일정 길이로 파싱하는 기능 + * + * @param String parFile 파일 + * @param int[] parLen 각 필드의 길이 + * @param int parLine 읽어낼 라인수 + * @return Vector parResult 파싱결과 구조체 + * @exception Exception + */ + public static Vector> parsFileBySize(String parFile, int[] parLen, int parLine) throws Exception { + + // 파싱결과 구조체 + Vector> parResult = new Vector>(); + + // 파일 오픈 + String parFile1 = parFile.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File file = new File(EgovWebUtil.filePathBlackList(parFile1)); + BufferedReader br = null; + try { + // 파일이며, 존재하면 파싱 시작 + if (file.exists() && file.isFile()) { + + // 1. 입력된 라인수만큼 파일 텍스트 내용을 읽어서 String[]에 쌓는다. + br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); + if (parLine < 0) { + parLine = 0; + } + String[] strArr = new String[parLine]; + String line = ""; + int readCnt = 0; + while ((line = br.readLine()) != null && readCnt < parLine) { + if (line.length() <= MAX_STR_LEN) + strArr[readCnt++] = line; + } + + // 2. Vector 형태로 만든다. + for (int i = 0; i < strArr.length; i++) { + String text = strArr[i]; + List arr = new ArrayList(); + int idx = 0; + boolean result = false; + for (int j = 0; j < parLen.length; j++) { + if (!result) { //if(result != true){ + String split = ""; + if (text.length() < (idx + parLen[j])) { + split = text.substring(idx, text.length()); + result = true; + } else { + split = text.substring(idx, idx + parLen[j]); + } + arr.add(split); + idx = idx + parLen[j]; + } + } + parResult.add(arr); + } + } + } finally { + EgovResourceCloseHelper.close(br); + } + + return parResult; + } + + /** + * 두 파일의 사이즈를 비교하는 기능 (KB 단위 비교) + * + * @param String cmprFile1 파일1 + * @param String cmprFile2 파일2 + * @return boolean result 동일여부 True / False + * @exception Exception + */ + public static boolean cmprFilesBySize(String cmprFile1, String cmprFile2) throws Exception { + + // 파일 동일 여부 + boolean result = false; + + // 파일 오픈 + String cmprFile11 = cmprFile1.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + String cmprFile22 = cmprFile2.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File file1 = new File(EgovWebUtil.filePathBlackList(cmprFile11)); + File file2 = new File(EgovWebUtil.filePathBlackList(cmprFile22)); + + // 파일이며, 존재하면 파일 사이즈 비교 + if (file1.exists() && file2.exists() && file1.isFile() && file2.isFile()) { + + // 파일1 사이즈 + long size1 = file1.length(); + + // 파일2 사이즈 + long size2 = file2.length(); + + // 사이즈 비교 + if (size1 == size2) { + result = true; + } + + } + + return result; + } + + /** + * 두 파일의 수정일자를 비교하는 기능 + * + * @param String cmprFile1 파일1 + * @param String cmprFile2 파일2 + * @return boolean result 동일여부 True / False + * @exception Exception + */ + public static boolean cmprFilesByUpdtPd(String cmprFile1, String cmprFile2) throws Exception { + + // 파일 동일 여부 + boolean result = false; + + // 파일 오픈 + String cmprFile11 = cmprFile1.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + String cmprFile22 = cmprFile2.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File file1 = new File(EgovWebUtil.filePathBlackList(cmprFile11)); + File file2 = new File(EgovWebUtil.filePathBlackList(cmprFile22)); + + // 파일이며, 존재하면 파일 수정일자 비교 + if (file1.exists() && file2.exists() && file1.isFile() && file2.isFile()) { + + // 파일1 수정일자 + long date1 = file1.lastModified(); + java.text.SimpleDateFormat dateFormat1 = new java.text.SimpleDateFormat("yyyyMMdd", java.util.Locale.KOREA); + String lastUpdtDate1 = dateFormat1.format(new java.util.Date(date1)); + + // 파일2 수정일자 + long date2 = file2.lastModified(); + java.text.SimpleDateFormat dateFormat2 = new java.text.SimpleDateFormat("yyyyMMdd", java.util.Locale.KOREA); + String lastUpdtDate2 = dateFormat2.format(new java.util.Date(date2)); + + // 수정일자 비교 + if (lastUpdtDate1.equals(lastUpdtDate2)) { + result = true; + } + } + + return result; + } + + /** + * 두 파일의 내용을 비교하는 기능 (TEXT파일만 가능) + * + * @param String cmprFile1 파일1 + * @param String cmprFile2 파일2 + * @return boolean result 동일여부 True / False + * @exception Exception + */ + public static boolean cmprFilesByContent(String cmprFile1, String cmprFile2) throws Exception { + + // 파일 동일 여부 + boolean result = false; + + // 파일 오픈 + String cmprFile11 = cmprFile1.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + String cmprFile22 = cmprFile2.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File file1 = new File(EgovWebUtil.filePathBlackList(cmprFile11)); + File file2 = new File(EgovWebUtil.filePathBlackList(cmprFile22)); + + BufferedReader br1 = null; + BufferedReader br2 = null; + + try { + // 파일이며, 존재하면 파일 내용 비교 + if (file1.exists() && file2.exists() && file1.isFile() && file2.isFile()) { + + List cmprText1 = new ArrayList(); + List cmprText2 = new ArrayList(); + + // 파일1 텍스트 내용 + br1 = new BufferedReader(new InputStreamReader(new FileInputStream(file1))); + String line1 = ""; + while ((line1 = br1.readLine()) != null) { + if (line1.length() < MAX_STR_LEN) + cmprText1.add(line1); + } + + // 파일2 텍스트 내용 + br2 = new BufferedReader(new InputStreamReader(new FileInputStream(file2))); + String line2 = ""; + while ((line2 = br2.readLine()) != null) { + if (line2.length() <= MAX_STR_LEN) + cmprText2.add(line2); + } + + // 내용 비교 + boolean isWrong = false; + for (int i = 0; i < cmprText1.size(); i++) { + if (!isWrong) { // if(isWrong != true){ + String text1 = cmprText1.get(i); + String text2 = cmprText2.get(i); + + if (!text1.equals(text2)) { + isWrong = true; + } + } + } + + if (!isWrong) { + result = true; + } + } + } finally { + EgovResourceCloseHelper.close(br1, br2); + } + + return result; + } + + /** + * 두 파일의 생성자를 비교하는 기능 + * + * @param String cmprFile1 파일1 + * @param String cmprFile2 파일2 + * @return boolean result 동일여부 True / False + * @exception Exception + */ + public static boolean cmprFilesByOwner(String cmprFile1, String cmprFile2) throws Exception { + + // 파일 동일 여부 + boolean result = false; + + // 파일1 생성자 + String owner1 = getOwner(cmprFile1); + + // 파일2 생성자 + String owner2 = getOwner(cmprFile2); + + if (owner1 != null && owner2 != null && !"".equals(owner1) && !"".equals(owner2) && owner1.equals(owner2)) { + result = true; + } + + return result; + } + + /** + * 단일 파일을 다른 파일에 복사(Copy)한다. + * + * @param String source 원본파일 + * @param String target 타겟파일 + * @return boolean result 복사여부 True / False + * @exception Exception + */ + public static boolean copyFile(String source, String target) throws Exception { + + // 복사여부 + boolean result = false; + + // 원본 파일 + String src = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + + // 타켓 파일 + String tar = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + + // 원본 파일이 존재하는지 확인한다. + if (srcFile.exists()) { + + // 복사될 target 파일 생성 + tar = createNewFile(tar); + //log.debug("tar:"+tar); + File tarFile = new File(EgovWebUtil.filePathBlackList(tar)); + //log.debug("tarFile:"+tarFile.getAbsolutePath()); + // 복사 + result = execCopyFile(srcFile, tarFile); + } + + return result; + } + + /** + * 여러 파일을 다른 디렉토리에 복사(Copy)한다. + * + * @param String source 원본파일들 + * @param String target 타겟디렉토리 + * @return boolean result 복사여부 True / False + * @exception Exception + */ + public static boolean copyFiles(String[] source, String target) throws Exception { + + // 복사여부 + boolean result = true; + + // 복사 이전에 복사할 파일들의 경로가 올바른지 확인한다. + for (int i = 0; i < source.length; i++) { + String src = source[i].replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File chkFile = new File(EgovWebUtil.filePathBlackList(src)); + if (!chkFile.exists()) { + //log.debug("+++ 원본 파일이 존재하지 않습니다."); + return result; + } + } + + String tar = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + + // 복사를 시작한다. + for (int j = 0; j < source.length; j++) { + + if (result) { //result != false + + // 타겟파일이름 명명 + File chkFile = new File(EgovWebUtil.filePathBlackList(source[j])); + String tarTemp = tar + FILE_SEPARATOR + chkFile.getName(); + + // 복사될 target 파일 생성 + tarTemp = createNewFile(tarTemp); + File tarFile = new File(EgovWebUtil.filePathBlackList(tarTemp)); + + // 복사 + result = execCopyFile(chkFile, tarFile); + } + } // end for + + return result; + } + + /** + * 확장자별 파일들을 다른 디렉토리에 복사(Copy)한다. + * + * @param String source 원본디렉토리 + * @param String extnt 확장자(.txt 형태 입력) + * @param String target 타겟디렉토리 + * @return boolean result 복사여부 True / False + * @exception Exception + */ + public static boolean copyFilesByExtnt(String source, String extnt, String target) throws Exception { + + // 복사여부 + boolean result = true; + + // 원본 파일 + String src = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + + // 원본 디렉토리가 존재하는지 확인한다. + if (srcFile.exists() && srcFile.isDirectory()) { + + String tar = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + + // 원본 디렉토리 안에서 확장자가 일치하는 파일목록을 가져온다. + File[] fileArray = srcFile.listFiles(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (fileArray != null) { + List list = getSubFilesByExtnt(fileArray, extnt); + + // 복사를 시작한다. + for (int i = 0; i < list.size(); i++) { + if (result) { //f(result != false){ + // 원본파일 절대경로 + String abspath = (String) list.get(i); + + // 타겟파일이름 명명 + File chkFile = new File(EgovWebUtil.filePathBlackList(abspath)); + String tarTemp = tar + FILE_SEPARATOR + chkFile.getName(); + + // 복사될 target 파일 생성 + tarTemp = createNewFile(tarTemp); + File tarFile = new File(EgovWebUtil.filePathBlackList(tarTemp)); + + // 복사 + result = execCopyFile(chkFile, tarFile); + } + } // end for + } + else { + result = false; + } + + } + + return result; + } + + /** + * 수정기간내 파일들을 다른 디렉토리에 복사(Copy)한다. + * + * @param String source 원본디렉토리 + * @param String updtFrom 수정시작일자(YYYYMMDD 형태로 입력) + * @param String updtTo 수정종료일자(YYYYMMDD 형태로 입력) + * @param String target 타겟디렉토리 + * @return boolean result 복사여부 True / False + * @exception Exception + */ + public static boolean copyFilesByUpdtPd(String source, String updtFrom, String updtTo, String target) throws Exception { + + // 복사여부 + boolean result = true; + + // 원본 파일 + String src = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + + // 원본 디렉토리가 존재하는지 확인한다. + if (srcFile.exists() && srcFile.isDirectory()) { + + String tar = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + + // 원본 디렉토리 안에서 수정기간내 존재하는 파일목록을 가져온다. + File[] fileArray = srcFile.listFiles(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (fileArray != null) { + List list = getSubFilesByUpdtPd(fileArray, updtFrom, updtTo); + + // 복사를 시작한다. + for (int i = 0; i < list.size(); i++) { + + if (result) { //f(result != false){ + + // 원본파일 절대경로 + String abspath = (String) list.get(i); + + // 타겟파일이름 명명 + File chkFile = new File(EgovWebUtil.filePathBlackList(abspath)); + String tarTemp = tar + FILE_SEPARATOR + chkFile.getName(); + + // 복사될 target 파일 생성 + tarTemp = createNewFile(tarTemp); + File tarFile = new File(tarTemp); + + // 복사 + result = execCopyFile(chkFile, tarFile); + } + } // end for + } + } + + return result; + } + + /** + * 사이즈내 파일들을 다른 디렉토리에 복사(Copy)한다. + * + * @param String source 원본디렉토리 + * @param Long sizeFrom 최소사이즈(KB) + * @param Long sizeTo 최대사이즈(KB) + * @param String target 타겟디렉토리 + * @return boolean result 복사여부 True / False + * @exception Exception + */ + public static boolean copyFilesBySize(String source, long sizeFrom, long sizeTo, String target) throws Exception { + + // 복사여부 + boolean result = true; + + // 원본 파일 + String src = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + + // 원본 디렉토리가 존재하는지 확인한다. + if (srcFile.exists() && srcFile.isDirectory()) { + + String tar = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + + // 원본 디렉토리 안에서 사이즈내 존재하는 파일목록을 가져온다. + File[] fileArray = srcFile.listFiles(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (fileArray != null) { + List list = getSubFilesBySize(fileArray, sizeFrom, sizeTo); + + // 복사를 시작한다. + for (int i = 0; i < list.size(); i++) { + + if (result) { //result != false + // 원본파일 절대경로 + String abspath = (String) list.get(i); + + // 타겟파일이름 명명 + File chkFile = new File(EgovWebUtil.filePathBlackList(abspath)); + String tarTemp = tar + FILE_SEPARATOR + chkFile.getName(); + + // 복사될 target 파일 생성 + tarTemp = createNewFile(tarTemp); + File tarFile = new File(EgovWebUtil.filePathBlackList(tarTemp)); + + // 복사 + result = execCopyFile(chkFile, tarFile); + if (result) { + break; + } + } + } // end for + } + + } + + return result; + } + + /** + * 생성자별 파일들을 다른 디렉토리에 복사(Copy)한다. + * + * @param String source 원본디렉토리 + * @param String owner 생성자 + * @param String target 타겟디렉토리 + * @return boolean result 복사여부 True / False + * @exception Exception + */ + public static boolean copyFilesByOwner(String source, String owner, String target) throws Exception { + + // 복사여부 + boolean result = true; + + // 원본 파일 + String src = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + + // 원본 디렉토리가 존재하는지 확인한다. + if (srcFile.exists() && srcFile.isDirectory()) { + + String tar = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + + // 원본 디렉토리 안에서 생성자별 일치하는 파일목록을 가져온다. + File[] fileArray = srcFile.listFiles(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (fileArray != null) { + List list = getSubFilesByOwner(fileArray, owner); + + // 복사를 시작한다. + for (int i = 0; i < list.size(); i++) { + + if (result) { //result != false + + // 원본파일 절대경로 + String abspath = (String) list.get(i); + + // 타겟파일이름 명명 + File chkFile = new File(EgovWebUtil.filePathBlackList(abspath)); + String tarTemp = tar + FILE_SEPARATOR + chkFile.getName(); + + // 복사될 target 파일 생성 + tarTemp = createNewFile(tarTemp); + File tarFile = new File(EgovWebUtil.filePathBlackList(tarTemp)); + + // 복사 + result = execCopyFile(chkFile, tarFile); + + if (!result) { + break; + } + } + } // end for + } + + } + + return result; + } + + /** + * 복사를 수행하는 기능 + * + * @param File srcFile 원본파일 + * @param File tarFile 타겟파일 + * @return boolean result 복사여부 True / False + * @exception Exception + */ + public static boolean execCopyFile(File srcFile, File tarFile) throws Exception { + + // 결과 + boolean result = false; + FileInputStream fis = null; + FileOutputStream fos = null; + try { + // 복사 + fis = new FileInputStream(srcFile); + + //예외상황에 따른 처리 추가함. -> 만약 tarFile 이 디렉토리명인 경우 디렉토리 밑으로 새로 파일을 생성해서 복사한다.. like DOS + File tarFile1 = tarFile; + if (tarFile1.isDirectory()) { + tarFile1 = new File(EgovWebUtil.filePathBlackList(tarFile1.getAbsolutePath()) + "/" + srcFile.getName()); + } + fos = new FileOutputStream(tarFile1); + byte[] buffer = new byte[(int) BUFFER_SIZE]; + int i = 0; + if (fis != null && fos != null) { + while ((i = fis.read(buffer)) != -1) { + fos.write(buffer, 0, i); + } + } + + result = true; + } finally { + EgovResourceCloseHelper.close(fis, fos); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리를 삭제한다. (소유자 정보를 통해 삭제)
    +	 * 
    + * + * @param dirDeletePath 삭제하고자 하는디렉토리의 절대경로(파일의 경로가 들어오는 경우 삭제하지 않음) + * @param owner 디렉토리의 삭제조건 생성자 + * @return 성공하면 삭제된 절대경로, 아니면블랭크 + */ + + public static String deleteDirectory(String dirDeletePath, String dirOwner) { + + // 인자값 유효하지 않은 경우 블랭크 리턴 + if (dirDeletePath == null || dirDeletePath.equals("") || dirOwner == null || dirOwner.equals("")) { + return ""; + } + + // 찾은 결과를 전달할 ArrayList + String result = ""; + + try { + File file = new File(EgovWebUtil.filePathBlackList(dirDeletePath));//KISA 보안약점 조치 (2018-10-29, 윤창원) + + // 추가된 삭제조건 옵션에 합당한지 확인 + boolean isInCondition = false; + String realOwner = getOwner(dirDeletePath); + //log.debug("realOwner:"+realOwner); + if (dirOwner.equals(realOwner)) { + isInCondition = true; + } + // 삭제조건에 부합되면 디렉토리 삭제조치함 + if (file.isDirectory() && isInCondition) { + result = deleteDirectory(dirDeletePath); + } else { + result = realOwner; + } + } catch (NullPointerException e) {//KISA 보안약점 조치 (2018-10-29, 윤창원) + throw new RuntimeException(e); + } catch (Exception e) { + throw new RuntimeException(e); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리를 삭제한다. (생성일자 조건으로 삭제)
    +	 * 
    + * + * @param dirDeletePath 삭제하고자 하는디렉토리의 절대경로(파일의 경로가 들어오는 경우 삭제하지 않음) + * @param fromDate 디렉토리의 삭제조건 시작일자 + * @param toDate 디렉토리의 삭제조건 종료일자 + * @return 성공하면 삭제된 절대경로, 아니면블랭크 + */ + public static String deleteDirectory(String dirDeletePath, String fromDate, String toDate) { + + // 인자값 유효하지 않은 경우 블랭크 리턴 + if (dirDeletePath == null || dirDeletePath.equals("") || fromDate == null || fromDate.equals("") || toDate == null || toDate.equals("")) { + return ""; + } + + // 찾은 결과를 전달할 ArrayList + String result = ""; + File file = new File(EgovWebUtil.filePathBlackList(dirDeletePath)); + + // 추가된 삭제조건 옵션에 합당한지 확인 + boolean isInCondition = false; + String lastModifyedDate = getLastModifiedDateFromFile(file); + //log.debug("lastModifyedDate:"+lastModifyedDate); + + if (Integer.parseInt(lastModifyedDate) >= Integer.parseInt(fromDate) && Integer.parseInt(lastModifyedDate) <= Integer.parseInt(toDate)) { + isInCondition = true; + } + + // 삭제조건에 부합되면 디렉토리 삭제조치함 + if (file.isDirectory() && isInCondition) { + result = deleteDirectory(dirDeletePath); + } + + return result; + } + + /** + * 파일(디렉토리)가 존재하는 파일시스템(마운트된 위치)을 조회하는 기능 + * + * @param String file 파일(디렉토리) + * @return String mountLc 마운트위치 + * @exception Exception + */ + public static String getMountLc(String file) throws Exception { + + // 디스크명 + String diskName = ""; + + //String drctryName = ""; + String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + if (srcFile.exists()) { + + // 유닉스 파일시스템명 조회 (df -k $1 | grep $2 | awk -F" " '{print $7}') + if (Globals.OS_TYPE.equals("UNIX")) { + Process p = null; + String[] command = { EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".getMountLc"), src, "/" }; + p = Runtime.getRuntime().exec(command); + //p.waitFor(); + + //boolean result = false; + BufferedReader b_out = new BufferedReader(new InputStreamReader(p.getInputStream())); + try { + while (true) { + String str = b_out.readLine(); + if (str == null || "".equals(str)) { + break; + } + if (str.length() <= MAX_STR_LEN) { + diskName = str; + } else { + diskName = str.substring(0, MAX_STR_LEN); + } + } + } finally { + EgovResourceCloseHelper.close(b_out); + } + + if (p != null) { + p.destroy(); + } + + // 윈도우 파일시스템명 조회 + } else if (Globals.OS_TYPE.equals("WINDOWS")) { + + diskName = src.substring(0, 1).toUpperCase(); + //log.debug(diskName); + } + } + + return diskName; + } + + /** + * 파일(디렉토리)가 존재하는 디렉토리(Parent)를 조회하는 기능 + * + * @param String file 파일(디렉토리) + * @return String drctryName 디렉토리 + * @exception Exception + */ + public static String getDrctryName(String file) throws Exception { + + String drctryName = ""; + String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + if (srcFile.exists()) { + drctryName = srcFile.getParent(); + } + + return drctryName; + } + + /** + * 파일(디렉토리)가 존재하는 파일명을 조회하는 기능 + * + * @param String file 파일(디렉토리) + * @return String fileName 파일명 + * @exception Exception + */ + public static String getFileName(String file) throws Exception { + + String fileName = ""; + String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + if (srcFile.exists()) { + fileName = srcFile.getName(); + } + + return fileName; + } + + /** + * 파일(디렉토리)의 최종수정일자를 조회하는 기능 + * + * @param String file 파일(디렉토리) + * @return String updtDate 최종수정일자(YYYYMMDD 형태) + * @exception Exception + */ + public static String getUpdtDate(String file) throws Exception { + + String updtDate = ""; + String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + if (srcFile.exists()) { + long date = srcFile.lastModified(); + java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyyMMdd", java.util.Locale.KOREA); + updtDate = dateFormat.format(new java.util.Date(date)); + } + + return updtDate; + } + + /** + * 파일(디렉토리)의 생성자를 조회하는 기능 + * + * @param String file 파일(디렉토리) + * @return String owner 생성자 + * @exception Exception + */ + public static String getOwner(String file) throws Exception { + + String owner = ""; + String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + BufferedReader b_err = null; + BufferedReader b_out = null; + try { + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + if (srcFile.exists()) { + + // 파일 생성자 조회 + String parentPath = srcFile.getParent(); + String fname = srcFile.getName(); + + Process p = null; + String cmdStr = EgovStringUtil.isNullToString(EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".getDrctryOwner")); + String[] command = { cmdStr.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR), parentPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR), + fname }; + p = Runtime.getRuntime().exec(command); + p.waitFor(); + //프로세스 에러시 종료 + if (p != null && p.exitValue() != 0) { + b_err = new BufferedReader(new InputStreamReader(p.getErrorStream())); + while (b_err.ready()) { + //String line = b_err.readLine(); + //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line); + } + } else { //프로세스 실행 성공시 결과 확인 + boolean result = false; + b_out = new BufferedReader(new InputStreamReader(p.getInputStream())); + while (b_out.ready()) { + if (!result) { // result != true + // 결과문자가 있으면 생성자가 있다는 의미 + owner = b_out.readLine(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (owner != null) { + if (owner.length() <= MAX_STR_LEN) { + if (!"".equals(owner)) { + result = true; + break; + } + } + } + } + } + } + + } + } finally { + EgovResourceCloseHelper.close(b_err, b_out); + } + + return owner; + } + + /** + * 파일(디렉토리)의 접근권한을 조회하는 기능 + * + * @param String file 파일(디렉토리) + * @return String access 접근권한(유닉스=777, 666, 윈도우=Read, Write, Read Only) + * @exception Exception + */ + public static String getAccess(String file) throws Exception { + + String access = ""; + String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + BufferedReader b_err = null; + BufferedReader b_out = null; + try { + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + if (srcFile.exists()) { + + // 접근권한 조회 + String parentPath = EgovWebUtil.filePathBlackList(srcFile.getParent()); + String fname = EgovWebUtil.filePathBlackList(srcFile.getName()); + + Process p = null; + if (Globals.OS_TYPE.equals("UNIX")) { + String[] command = { EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".getDrctryAccess"), parentPath, fname }; + p = Runtime.getRuntime().exec(command); + p.waitFor(); + //프로세스 에러시 종료 + if (p != null && p.exitValue() != 0) { + b_err = new BufferedReader(new InputStreamReader(p.getErrorStream())); + while (b_err.ready()) { + //String line = b_err.readLine(); + //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line); + } + b_err.close(); + } + //프로세스 실행 성공시 결과 확인 + else { + boolean result = false; + b_out = new BufferedReader(new InputStreamReader(p.getInputStream())); + while (b_out.ready()) { + if (!result) { //result != true + access = b_out.readLine(); + if (access != null && !"".equals(access) && access.length() <= MAX_STR_LEN) { + result = true; + break; + } + } + } + b_out.close(); + } + } else if (Globals.OS_TYPE.equals("WINDOWS")) { + String[] command = { "cmd", "/c", "attrib", src }; + p = Runtime.getRuntime().exec(command); + p.waitFor(); + //프로세스 에러시 종료 + if (p != null && p.exitValue() != 0) { + b_err = new BufferedReader(new InputStreamReader(p.getErrorStream())); + while (b_err.ready()) { + //String line = b_err.readLine(); + //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line); + } + } else { //프로세스 실행 성공시 결과 확인 + boolean result = false; + b_out = new BufferedReader(new InputStreamReader(p.getInputStream())); + while (b_out.ready()) { + if (!result) { //result != true + access = b_out.readLine(); + if (access != null && !"".equals(access) && access.length() <= MAX_STR_LEN) { + access = access.toUpperCase().replace(src.toUpperCase(), ""); + access = access.replace(" ", ""); + result = true; + if (result) { + break; + } + } + } + } + + if (result) { + String acs = ""; + boolean read = false; + boolean write = true; + boolean system = false; + boolean hidden = false; + + for (int i = 0; i < access.length(); i++) { + char chr = access.charAt(i); + switch (chr) { + case ACCESS_READ: + read = true; + write = false; + break; + case ACCESS_SYS: + system = true; + break; + case ACCESS_HIDE: + hidden = true; + break; + default: + break; + } + } + + if (read) { + acs += "READ-ONLY|"; + } else { + acs += "READ|"; + } + if (write) { + acs += "WRITE|"; + } + if (system) { + acs += "SYSTEM|"; + } + if (hidden) { + acs += "HIDDEN|"; + } + access = acs; + } + } + } + + } + } finally { + EgovResourceCloseHelper.close(b_err, b_out); + } + + return access; + } + + /** + * 파일(디렉토리)의 사이즈를 조회하는 기능 + * + * @param String file 파일(디렉토리) + * @return Long size 사이즈(Byte) + * @exception Exception + */ + public static long getSize(String file) throws Exception { + + long size = 0L; + String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + if (srcFile.exists()) { + size = srcFile.length(); + } + + return size; + } + + /** + * 파일(디렉토리)의 포맷을 조회하는 기능 + * + * @param String file 파일(디렉토리) + * @return String format 포맷 + * @exception Exception + */ + public static String getFormat(String file) throws Exception { + + // 포맷, 타입 + String format = ""; + String type = ""; + + String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + if (srcFile.exists()) { + + String[] strArr = src.split("\\."); + if (strArr.length >= 2) { + format = strArr[strArr.length - 1].toLowerCase(); + type = EgovProperties.getProperty(Globals.FILE_FORMAT_PATH, format); + } + } + + return type; + } + + /** + *
    +	 * Comment : 디렉토리를 복사한다.
    +	 * 
    + * + * @param String originalDirPath 원본 디렉토리 의 절대경로 + * @param String targetDirPath 타겟 디렉토리 의 절대경로 + * @return boolean result 복사가 성공하면 true, 실패하면 false를 리턴한다. + */ + public static boolean copyDirectory(String originalDirPath, String targetDirPath) throws Exception { + + // 인자값 유효하지 않은 경우 공백 리턴 + if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("")) { + return false; + } + boolean result = false; + File f = null; + + f = new File(EgovWebUtil.filePathBlackList(originalDirPath)); + // 원본이 유효해야 진행한다. + if (f.exists() && f.isDirectory()) { + + //타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함. + String targetDirPath1 = createNewDirectory(targetDirPath); + if (targetDirPath1.equals("")) { + result = false; + } else { + File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath1)); + //2017.02.08 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754] + if(targetDir.mkdirs()){ + LOGGER.debug("[file.mkdirs] targetDir : Directory Creation Success"); + }else{ + LOGGER.error("[file.mkdirs] targetDir : Directory Creation Fail"); + } + + // 디렉토리에 속한 파일들을 복사한다. + String[] originalFileList = f.list(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (originalFileList != null) { + if (originalFileList.length > 0) { + for (int i = 0; i < originalFileList.length; i++) { + File subF = new File(EgovWebUtil.filePathBlackList(originalDirPath) + FILE_SEPARATOR + originalFileList[i]); + if (subF.isFile()) { + //하위목록이 파일이면 파일복사실행 -> 실패 발생하는 경우 복사를 중단한다. + result = copyFile(originalDirPath + FILE_SEPARATOR + originalFileList[i], targetDir.getAbsolutePath() + FILE_SEPARATOR + originalFileList[i]); + } else { + //하위목록이 디렉토리이면 복사를 재귀적으로 호출한다. + result = copyDirectory(originalDirPath + "/" + originalFileList[i], targetDirPath1 + "/" + originalFileList[i]); + } + } + } else { + result = true; + } + } + } + } else { + // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료 + result = false; + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리를 복사한다. (생성일자 조건으로  복사)
    +	 * 
    + * + * @param String originalDirPath 원본 디렉토리 의 절대경로 + * @param String targetDirPath 타겟 디렉토리 의 절대경로 + * @param fromDate 디렉토리의 복사조건 시작일자 + * @param toDate 디렉토리의 복사조건 종료일자 + * @return boolean result 복사가 성공함변 true, 실패하면 false를 리턴한다. + */ + public static boolean copyDirectory(String originalDirPath, String targetDirPath, String fromDate, String toDate) throws Exception { + + // 인자값 유효하지 않은 경우 공백 리턴 + if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("") || fromDate == null || fromDate.equals("") || toDate == null + || toDate.equals("")) { + return false; + } + boolean result = false; + File f = null; + + f = new File(EgovWebUtil.filePathBlackList(originalDirPath)); + boolean isInCondition = false; + String lastModifyedDate = getLastModifiedDateFromFile(f); + if (Integer.parseInt(lastModifyedDate) >= Integer.parseInt(fromDate) && Integer.parseInt(lastModifyedDate) <= Integer.parseInt(toDate)) { + isInCondition = true; + } + + // 원본이 유효하고 조건에 부합되야 진행한다. + if (f.exists() && f.isDirectory() && isInCondition) { + + //타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함. + String targetDirPath1 = createNewDirectory(targetDirPath); + if (targetDirPath1.equals("")) { + result = false; + } else { + File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath1)); + //2017.02.08 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754] + if(targetDir.mkdirs()){ + LOGGER.debug("[file.mkdirs] targetDir : Directory Creation Success"); + }else{ + LOGGER.error("[file.mkdirs] targetDir : Directory Creation Fail"); + } + + // 디렉토리에 속한 파일들을 복사한다. + String[] originalFileList = f.list(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (originalFileList != null) { + if (originalFileList.length > 0) { + for (int i = 0; i < originalFileList.length; i++) { + File subF = new File(EgovWebUtil.filePathBlackList(originalDirPath) + FILE_SEPARATOR + originalFileList[i]); + if (subF.isFile()) { + //하위목록이 파일이면 파일복사실행 -> 실패 발생하는 경우 복사를 중단한다. + result = copyFile(originalDirPath + FILE_SEPARATOR + originalFileList[i], targetDir.getAbsolutePath() + FILE_SEPARATOR + originalFileList[i]); + } else { + //하위목록이 디렉토리이면 복사를 재귀적으로 호출한다. + //하위목록에 해당하는 폴더에 대해서는 생성일자 검사를 하지 않는다.(현재 폴더가 복사대상이면 현재폴더의 하위는 제외없이 복사함) + result = copyDirectory(originalDirPath + "/" + originalFileList[i], targetDirPath1 + "/" + originalFileList[i]); + } + } + } else { + result = true; + } + } + } + + } else { + // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료 + result = false; + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리를 복사한다. (생성자 조건으로복사)
    +	 * 
    + * + * @param String originalDirPath 원본 디렉토리 의 절대경로 + * @param String targetDirPath 타겟 디렉토리 의 절대경로 + * @param String owner 디렉토리의 복사조건생성자 + * @return boolean result 복사가 성공함변 true, 실패하면 false를 리턴한다. + */ + public static boolean copyDirectory(String originalDirPath, String targetDirPath, String owner) throws Exception { + + // 인자값 유효하지 않은 경우 공백 리턴 + if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("") || owner == null || owner.equals("")) { + return false; + } + boolean result = false; + File f = null; + + f = new File(EgovWebUtil.filePathBlackList(originalDirPath)); + boolean isInCondition = false; + String realOwner = getOwner(originalDirPath); + if (realOwner.equals(owner)) { + isInCondition = true; + } + + // 원본이 유효하고 조건에 부합되야 진행한다. + if (f.exists() && f.isDirectory() && isInCondition) { + + String targetDirPath1 = createNewDirectory(targetDirPath); + if (targetDirPath1.equals("")) { + //타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함. + result = false; + } else { + File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath1)); + + //2017.02.08 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754] + if(targetDir.mkdirs()){ + LOGGER.debug("[file.mkdirs] targetDir : Directory Creation Success"); + }else{ + LOGGER.error("[file.mkdirs] targetDir : Directory Creation Fail"); + } + + // 디렉토리에 속한 파일들을 복사한다. + String[] originalFileList = f.list(); + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (originalFileList != null) { + if (originalFileList.length > 0) { + for (int i = 0; i < originalFileList.length; i++) { + File subF = new File(EgovWebUtil.filePathBlackList(originalDirPath) + FILE_SEPARATOR + originalFileList[i]); + if (subF.isFile()) { + //하위목록이 파일이면 파일복사실행 -> 실패 발생하는 경우 복사를 중단한다. + result = copyFile(originalDirPath + FILE_SEPARATOR + originalFileList[i], targetDir.getAbsolutePath() + FILE_SEPARATOR + originalFileList[i]); + } else { + //하위목록이 디렉토리이면 복사를 재귀적으로 호출한다. + //하위목록에 해당하는 폴더에 대해서는 생성일자 검사를 하지 않는다.(현재 폴더가 복사대상이면 현재폴더의 하위는 제외없이 복사함) + result = copyDirectory(originalDirPath + "/" + originalFileList[i], targetDirPath1 + "/" + originalFileList[i]); + } + } + } else { + result = false; + } + } + } + + } else { + // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료 + result = false; + } + + return result; + } + + /** + * 디렉토리의 사이즈를 조회한다. + * + * @param String targetDirPath 디렉토리 + * @return long size 디렉토리사이즈 + * @exception Exception + */ + public static long getDirectorySize(String targetDirPath) throws Exception { + + File f = new File(EgovWebUtil.filePathBlackList(targetDirPath)); + if (!f.exists()) { + return 0; + } + if (f.isFile()) { + return f.length(); + } + + File[] list = f.listFiles(); + long size = 0; + long fileSize = 0; + + //KISA 보안약점 조치 (2018-10-29, 윤창원) + if (list != null) { + for (int i = 0; i < list.length; i++) { + + if (list[i].isDirectory()) { + // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다. + fileSize = getDirectorySize(list[i].getAbsolutePath()); + } else { + // 파일의 사이즈 조회 + fileSize = list[i].length(); + } + size = size + fileSize; + } + } + return size; + } + + /** + *
    +	 * Comment : 디렉토리를 이동한다.
    +	 * 
    + * + * @param String originalDirPath 원본 디렉토리 의 절대경로 + * @param String targetDirPath 타겟 디렉토리 의 절대경로 + * @return boolean result 이동이 성공하면 true, 실패하면 false를 리턴한다. + */ + public static boolean moveFile(String originalDirPath, String targetDirPath) throws Exception { + + // 인자값 유효하지 않은 경우 공백 리턴 + if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("")) { + return false; + } + boolean result = false; + File f = null; + BufferedReader b_err = null; + BufferedReader b_out = null; + try { + f = new File(EgovWebUtil.filePathBlackList(originalDirPath)); + // 원본은 유효하고 대상이 신규로 생성가능한 상태인경우만 진행한다. + //if(f.exists() && f.isDirectory() ){ // 디렉토리만 이동할수 있도록 제한하는 경우 + + if (f.exists()) { + // 타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함. + File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath)); + if (targetDir.exists()) { + // 타겟경로가 이미 있는 경우는 종료 + result = false; + } else { + // 새로 생성되는 경우만 진행한다. (이동쉘을 실행시킨다.) + //KISA 보안약점 조치 (2018-10-29, 윤창원) + String cmdStr = EgovStringUtil.isNullToString(EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".moveDrctry")); + String[] command = { cmdStr.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR), + EgovWebUtil.filePathBlackList(originalDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)), + EgovWebUtil.filePathBlackList(targetDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)) }; + Process p = Runtime.getRuntime().exec(command); + //String access = ""; + p.waitFor(); + //프로세스 에러시 종료 + if (p != null && p.exitValue() != 0) { + b_err = new BufferedReader(new InputStreamReader(p.getErrorStream())); + while (b_err.ready()) { + //String line = b_err.readLine(); + //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line); + } + b_err.close(); + } + //프로세스 실행 성공시 결과 확인 + else { + result = true; + } + } + + } else { + // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료 + result = false; + } + } finally { + EgovResourceCloseHelper.close(b_err, b_out); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리를 이동한다.
    +	 * 
    + * + * @param String originalDirPath 원본 디렉토리 의 절대경로 + * @param String targetDirPath 타겟 디렉토리 의 절대경로 + * @return boolean result 이동이 성공하면 true, 실패하면 false를 리턴한다. + */ + public static boolean moveFile2(String originalDirPath, String targetDirPath) throws Exception { + + // 인자값 유효하지 않은 경우 공백 리턴 + if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("")) { + return false; + } + boolean result = false; + File f = null; + BufferedReader b_err = null; + BufferedReader b_out = null; + try { + f = new File(EgovWebUtil.filePathBlackList(originalDirPath)); + // 원본은 유효하고 대상이 신규로 생성가능한 상태인경우만 진행한다. + //if(f.exists() && f.isDirectory() ){ // 디렉토리만 이동할수 있도록 제한하는 경우 + + System.out.println("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"); + System.out.println("f.exists() = "+f.exists()); + if (f.exists()) { + // 타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함. + File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath)); + System.out.println("targetDirPath = "+targetDirPath); + System.out.println("targetDir = "+targetDir); + System.out.println("targetDir.exists() = "+targetDir.exists()); + if (!targetDir.exists()) { + // 타겟경로가 이미 있는 경우는 종료 + result = false; + } else { + // 새로 생성되는 경우만 진행한다. (이동쉘을 실행시킨다.) + //KISA 보안약점 조치 (2018-10-29, 윤창원) + String cmdStr = EgovStringUtil.isNullToString(targetDir); + String[] command = { cmdStr.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR), + EgovWebUtil.filePathBlackList(originalDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)), + EgovWebUtil.filePathBlackList(targetDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)) }; + Process p = Runtime.getRuntime().exec(command); + //String access = ""; + p.waitFor(); + //프로세스 에러시 종료 + if (p != null && p.exitValue() != 0) { + b_err = new BufferedReader(new InputStreamReader(p.getErrorStream())); + while (b_err.ready()) { + //String line = b_err.readLine(); + //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line); + } + b_err.close(); + } + //프로세스 실행 성공시 결과 확인 + else { + result = true; + } + } + + } else { + // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료 + result = false; + } + } finally { + EgovResourceCloseHelper.close(b_err, b_out); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리를 이동한다. (생성일자 조건으로 이동)
    +	 * 
    + * + * @param String originalDirPath 원본 디렉토리 의 절대경로 + * @param String targetDirPath 타겟 디렉토리 의 절대경로 + * @param fromDate 디렉토리의이동조건 시작일자 + * @param toDate 디렉토리의 이동조건 종료일자 + * @return boolean result 이동이 성공하면 true, 실패하면 false를 리턴한다. + */ + public static boolean moveFile(String originalDirPath, String targetDirPath, String fromDate, String toDate) throws Exception { + + // 인자값 유효하지 않은 경우 공백 리턴 + if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("") || fromDate == null || fromDate.equals("") || toDate == null + || toDate.equals("")) { + return false; + } + boolean result = false; + File f = null; + BufferedReader b_err = null; + BufferedReader b_out = null; + try { + f = new File(originalDirPath); + // 원본은 유효하고 대상이 신규로 생성가능한 상태인경우만 진행한다. + //if(f.exists() && f.isDirectory() ){ // 디렉토리만 이동할수 있도록 제한하는 경우 + if (f.exists()) { + // 타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함. + File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath)); + if (targetDir.exists()) { + // 타겟경로가 이미 있는 경우는 종료 + result = false; + } else { + // 새로 생성되는 경우만 진행한다. (이동쉘을 실행시킨다.) + boolean isInCondition = false; + String lastModifyedDate = getLastModifiedDateFromFile(f); + if (Integer.parseInt(lastModifyedDate) >= Integer.parseInt(fromDate) && Integer.parseInt(lastModifyedDate) <= Integer.parseInt(toDate)) { + isInCondition = true; + } + + if (isInCondition) { + //KISA 보안약점 조치 (2018-10-29, 윤창원) + String cmdStr = EgovStringUtil.isNullToString(EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".moveDrctry")); + String[] command = { cmdStr.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR), + EgovWebUtil.filePathBlackList(originalDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)), + EgovWebUtil.filePathBlackList(targetDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)) }; + Process p = Runtime.getRuntime().exec(command); + String access = ""; + p.waitFor(); + //프로세스 에러시 종료 + if (p != null && p.exitValue() != 0) { + b_err = new BufferedReader(new InputStreamReader(p.getErrorStream())); + while (b_err.ready()) { + //String line = b_err.readLine(); + //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line); + } + } + //프로세스 실행 성공시 결과 확인 + else { + result = false; + b_out = new BufferedReader(new InputStreamReader(p.getInputStream())); + while (b_out.ready()) { + if (!result) { // result != true + access = b_out.readLine(); + if (access != null && !"".equals(access) && access.length() <= MAX_STR_LEN) { + result = true; + break; + } + } + } + } + } + } + + } else { + // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료 + result = false; + } + } finally { + EgovResourceCloseHelper.close(b_err, b_out);; + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리를 이동한다. (생성자 조건으로 이동)
    +	 * 
    + * + * @param String originalDirPath 원본 디렉토리 의 절대경로 + * @param String targetDirPath 타겟 디렉토리 의 절대경로 + * @param String owner 디렉토리의 이동조건생성자 + * @return boolean result 이동이 성공하면 true, 실패하면 false를 리턴한다. + */ + public static boolean moveFile(String originalDirPath, String targetDirPath, String owner) throws Exception { + + // 인자값 유효하지 않은 경우 공백 리턴 + if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("") || owner == null || owner.equals("")) { + return false; + } + //log.debug("originalDirPath:"+originalDirPath); + //log.debug("targetDirPath:"+targetDirPath); + boolean result = false; + File f = null; + BufferedReader b_err = null; + BufferedReader b_out = null; + try { + f = new File(originalDirPath); + // 원본은 유효하고 대상이 신규로 생성가능한 상태인경우만 진행한다. + //if(f.exists() && f.isDirectory() ){ // 디렉토리만 이동할수 있도록 제한하는 경우 + if (f.exists()) { + // 타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함. + File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath)); + if (targetDir.exists()) { + // 타겟경로가 이미 있는 경우는 종료 + result = false; + } else { + // 새로 생성되는 경우만 진행한다. (이동쉘을 실행시킨다.) + boolean isInCondition = false; + String realOwner = getOwner(originalDirPath); + if (realOwner.equals(owner)) { + isInCondition = true; + } + + if (isInCondition) { + //KISA 보안약점 조치 (2018-10-29, 윤창원) + String cmdStr = EgovStringUtil.isNullToString(EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".moveDrctry")); + String[] command = { cmdStr.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR), + EgovWebUtil.filePathBlackList(originalDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)), + EgovWebUtil.filePathBlackList(targetDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)) }; + Process p = Runtime.getRuntime().exec(command); + String access = ""; + p.waitFor(); + //프로세스 에러시 종료 + if (p != null && p.exitValue() != 0) { + b_err = new BufferedReader(new InputStreamReader(p.getErrorStream())); + while (b_err.ready()) { + //String line = b_err.readLine(); + //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line); + } + } + //프로세스 실행 성공시 결과 확인 + else { + result = false; + b_out = new BufferedReader(new InputStreamReader(p.getInputStream())); + while (b_out.ready()) { + + if (!result) { //result != true + access = b_out.readLine(); + if (access != null && !"".equals(access) && access.length() <= MAX_STR_LEN) { + result = true; + if (result) { + break; + } + } + } + } + } + } + } + } else { + // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료 + result = false; + } + } finally { + EgovResourceCloseHelper.close(b_err, b_out); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리감시를 시작한다. 모니터링 시작시 해당 디렉토리의 이름으로 생성된 로그파일에 START기입하고 종료시END기입한다.
    +	 *           (로그파일이 이미 존재하는 경우는 모니터링이 현재 진행중인 상태이므로 새로 감시기능을 시작하지 않는다.)
    +	 * 
    + * + * @param String targetDirPath 타겟 디렉토리 의 절대경로 + * @param String logFile 모니터링정보를 보관할 로그파일경로 + * @param String eventPrg 이벤트 발생시 동작할 프로그램 + * @return boolean result 모니터링 시작 여부를 리턴한다. (모니터링 시작했으면 true, 모니터링이 시작되지 않았으면 false) + */ + public static boolean startDirectoryMonitering(String targetDirPath) throws Exception { + + // 인자값 유효하지 않은 경우 false 리턴 + if (targetDirPath == null || targetDirPath.equals("")) { + return false; + } + + boolean result = false; + FileReader fr = null; + BufferedReader br = null; + try { + // 로그파일을 생성한다. 만약 로그파일이 존재하면 이미 감시 프로세스가 동작중이므로 새로 시작하지 않는다. + + File targetF = new File(EgovWebUtil.filePathBlackList(targetDirPath)); + File logF = new File(EgovWebUtil.filePathBlackList(Globals.CONF_PATH) + "/" + targetF.getName() + ".log"); + + if (targetF.exists() && targetF.isDirectory()) { + + if (logF.exists()) { + // 이미 감시 프로세스 동작중임 + result = true; + //로그파일에서 중단여부 확인하여 중단된 상태이면 재실행함 + String lastStr = ""; + fr = new FileReader(logF); + br = new BufferedReader(fr); + //int ch = 0; + String line = ""; + while ((line = br.readLine()) != null) { + if (line.length() < MAX_STR_LEN) + lastStr = line; + } + //log.debug("lastStr:"+lastStr); + if (lastStr.equals("END")) { + EgovFileMntrg t = new EgovFileMntrg(EgovWebUtil.filePathBlackList(targetDirPath), logF); + t.start(); + } + } else { + result = logF.createNewFile(); + EgovFileMntrg t = new EgovFileMntrg(targetDirPath, logF); + t.start(); + } + } + } finally { + EgovResourceCloseHelper.close(fr, br); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리감시를 종료한다. 모니터링 시작시 해당 디렉토리의 이름으로 생성된 로그파일에 START기입하고 종료시END기입한다.
    +	 *           (로그파일이 존재하지 않는 경우는  모니터링이 아직 시작되지 않은 상태이므로별도로   종료하지 않는다.)
    +	 * 
    + * + * @param String targetDirPath 타겟 디렉토리 의 절대경로 + * @param String logFile 모니터링정보를 보관할 로그파일경로(감시프로세스 확인의 키값으로 사용된다) + * @return boolean result 모니터링 시작 여부를 리턴한다. (모니터링 시작했으면 true, 모니터링이 시작되지 않았으면 false) + */ + public static boolean stopDirectoryMonitering(String targetDirPath) throws Exception { + + // 인자값 유효하지 않은 경우 false 리턴 + if (targetDirPath == null || targetDirPath.equals("")) { + return false; + } + + boolean result = false; + FileReader fr = null; + BufferedReader br = null; + FileWriter fWriter = null; + BufferedWriter bWriter = null; + try { + File targetF = new File(EgovWebUtil.filePathBlackList(targetDirPath)); + File logF = new File(EgovWebUtil.filePathBlackList(Globals.CONF_PATH) + "/" + targetF.getName() + ".log"); + if (logF.exists()) { + + //로그파일 최종라인 확인 : END 여부 확인 + String lastStr = ""; + fr = new FileReader(logF); + br = new BufferedReader(fr); + //int ch = 0; + String line = ""; + while ((line = br.readLine()) != null) { + if (line.length() < MAX_STR_LEN) + lastStr = line; + } + br.close(); + + // if(lastStr.equals("END")){ + // // 로그파일이 존재하고 이미 종료요청이 된 상태이므로 작업없음 + // //log.debug("Already Ending Requested Status"); + // }else{ + if (!lastStr.equals("END")) { + fWriter = new FileWriter(logF, true); + bWriter = new BufferedWriter(fWriter); + br = new BufferedReader(new StringReader("END")); + while ((line = br.readLine()) != null && !lastStr.equals("END")) { + if (line.length() < MAX_STR_LEN) { + bWriter.write(line + "\n", 0, line.length() + 1); + } + } + } + result = true; + } else { + result = false; + } + + } finally { + EgovResourceCloseHelper.close(fr, br, fWriter, bWriter); + } + + return result; + } + + /** + *
    +	 * Comment : 디렉토리감시정보를 로그파일로부터 읽어온다.
    +	 * 
    + * + * @param String targetDirPath 타겟 디렉토리 의 절대경로 + * @param String logFile 모니터링정보를 보관하는 로그파일경로 + * @return ArrayList result 로그파일의 정보를 라인단위로 담아서 리턴한다. + */ + public static StringBuffer getDirectoryMoniteringInfo(String targetDirPath) throws Exception { + + // 인자값 유효하지 않은 경우 빈 ArrayList 리턴 + if (targetDirPath == null || targetDirPath.equals("")) { + return new StringBuffer(); + } + + StringBuffer result = new StringBuffer(); + FileReader fr = null; + try { + File targetF = new File(EgovWebUtil.filePathBlackList(targetDirPath)); + File logF = new File(EgovWebUtil.filePathBlackList(Globals.CONF_PATH) + "/" + targetF.getName() + ".log"); + if (!logF.exists()) { + result = new StringBuffer(); + } + fr = new FileReader(logF); + int ch = 0; + while ((ch = fr.read()) != -1) { + result.append((char) ch); + } + } finally { + EgovResourceCloseHelper.close(fr); + } + + return result; + } + +} diff --git a/src/main/java/egovframework/itgcms/common/CommentRestController.java b/src/main/java/egovframework/itgcms/common/CommentRestController.java new file mode 100644 index 0000000..fc0539d --- /dev/null +++ b/src/main/java/egovframework/itgcms/common/CommentRestController.java @@ -0,0 +1,196 @@ +package egovframework.itgcms.common; + +import java.io.IOException; +import java.sql.SQLException; +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.HttpSession; + +import org.springframework.stereotype.Controller; +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.util.HtmlUtils; + +import egovframework.itgcms.core.comment.service.CommentService; +import egovframework.itgcms.core.comment.service.CommentVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.psl.dataaccess.util.EgovMap; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +@Controller +public class CommentRestController { + + private static final int PAGE_SIZE = 10; + + @Resource(name="commentService") + private CommentService commentService; + + + @RequestMapping(value="/comment/list/{bdIdx}/{page}.do", method=RequestMethod.GET) + @ResponseBody + public EgovMap reqCommentList(@PathVariable("bdIdx") int bdIdx, @PathVariable("page") int page) throws IOException, SQLException, RuntimeException { + + EgovMap result = new EgovMap(); + + CommentVO searchVo = new CommentVO(); + + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(searchVo.getPageUnit()); + paginationInfo.setPageSize(searchVo.getPageSize()); + + searchVo.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVo.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + searchVo.setBdIdx(bdIdx); + + int totCnt = commentService.countCommentTotalCount(bdIdx); + + List resultList = commentService.commentListByBdIdx(searchVo); + result.put("list", resultList); + + Map pageInfo = new HashMap<>(); + + pageInfo.put("totCnt", totCnt); + pageInfo.put("currentPage", page); + pageInfo.put("pageSize", PAGE_SIZE); + pageInfo.put("startPage", ((int) (page-1) / PAGE_SIZE)*PAGE_SIZE +1); + pageInfo.put("lastPage", ((int) totCnt / searchVo.getPageUnit())+1); + + result.put("pageInfo", pageInfo); + + return result; + } + + + @RequestMapping(value="/comment/com/{bdIdx}.do", method=RequestMethod.POST) + @ResponseBody + public int registComment(@PathVariable("bdIdx") int bdIdx, @RequestParam("content") String contents, @RequestParam("id") String id, HttpSession session, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + + ItgMap licenseVO = CommUtil.getSystemLicenseVO(request, "license"); + int result = -1; + + if (!sessionIdCheck(session, id)) { return 0;} + if (!(bdIdx > 0)) {return 0;} + + + contents = CommUtil.getAntiHtml(contents, ""); + if ("".equals(contents)) { return result; } + + + CommentVO com = new CommentVO(); + + if (CommUtil.isNull(licenseVO.getValue(0), "").equals(id)) {com.setcWriter("슈퍼관리자");} + + com.setcContents(HtmlUtils.htmlEscape(contents)); + com.setRegMemId(id); + com.setBdIdx(bdIdx); + + if (commentService.registComment(com) >0) { + result = commentService.countCommentTotalCount(bdIdx); + result = ((int) result / com.getPageUnit())+1; + } + + return result; + } + + @RequestMapping(value="/comment/com/{bdIdx}/{reIdx}.do", method=RequestMethod.POST) + @ResponseBody + public int registReComment(@PathVariable("bdIdx") int bdIdx, @PathVariable("reIdx") int reIdx, + @RequestParam("content") String contents, @RequestParam("id") String id, @RequestParam("recomId") String reComId, HttpSession session, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + + ItgMap licenseVO = CommUtil.getSystemLicenseVO(request, "license"); + int result = -1; + + if (!sessionIdCheck(session, id)) { return 0; } + if (!(bdIdx > 0)) {return 0;} + if (!(reIdx > 0)) {return 0;} + if ("".equals(reComId)) {return 0;} + + contents = CommUtil.getAntiHtml(contents, ""); + if ("".equals(contents)) { return result; } + + CommentVO com = new CommentVO(); + if (CommUtil.isNull(licenseVO.getValue(0), "").equals(id)) {com.setcWriter("슈퍼관리자");} + + com.setcReIdx(reIdx); + com.setBdIdx(bdIdx); + com.setcContents(HtmlUtils.htmlEscape(contents)); + com.setRegMemId(id); + com.setcReComId(reComId); + + result = commentService.registReComment(com); + + return result; + } + + @RequestMapping(value="/comment/com/mod/{cIdx}.do", method=RequestMethod.POST) + @ResponseBody + public int modifyComment(@PathVariable("cIdx") int cIdx, @RequestParam("id") String id, @RequestParam("content") String contents, HttpSession session, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + + ItgMap licenseVO = CommUtil.getSystemLicenseVO(request, "license"); + int result = -1; + + if (!sessionIdCheck(session, id)) { return 0; } + if (!(cIdx > 0)) {return 0;} + + contents = CommUtil.getAntiHtml(contents, ""); + if ("".equals(contents)) { return result; } + + CommentVO com = new CommentVO(); + + if (CommUtil.isNull(licenseVO.getValue(0), "").equals(id)) {com.setcWriter("슈퍼관리자");} + + com.setCIdx(cIdx); + com.setcContents(HtmlUtils.htmlEscape(contents)); + com.setUpdMemId(id); + + result = commentService.modifyComment(com); + + return result; + } + + @RequestMapping(value="/comment/com/del{cIdx}.do", method=RequestMethod.POST) + @ResponseBody + public int deleteComment(@PathVariable("cIdx") int cIdx, @RequestParam("id") String id, @RequestParam("regId") String regId, HttpSession session) throws IOException, SQLException, RuntimeException { + + int result = -1; + + if (!sessionIdCheck(session, id)) { return 0; } + if (!sessionIdCheck(session, regId)) { return 0; } + if (!(cIdx > 0)) {return 0;} + + CommentVO com = new CommentVO(); + + com.setCIdx(cIdx); + com.setDelMemId(id); + + result = commentService.deleteComment(com); + + return result; + } + + + boolean sessionIdCheck(HttpSession session, String id){ + UserSessionVO userSession = (UserSessionVO)session.getAttribute("userSessionVO"); + if (userSession != null && userSession.getId().equals(id)) { + return true; + } + + MngrSessionVO mngrSessionVO = (MngrSessionVO)session.getAttribute("mngrSessionVO"); + if (mngrSessionVO != null) { + return true; + } + return false; + } + +} diff --git a/src/main/java/egovframework/itgcms/common/CommonController.java b/src/main/java/egovframework/itgcms/common/CommonController.java new file mode 100644 index 0000000..c50d2be --- /dev/null +++ b/src/main/java/egovframework/itgcms/common/CommonController.java @@ -0,0 +1,349 @@ +package egovframework.itgcms.common; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.WriterException; +import com.google.zxing.client.j2se.MatrixToImageWriter; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.QRCodeWriter; + +import egovframework.itgcms.core.menu.service.MngrMenuService; +//import egovframework.itgcms.core.slides.service.MngrSlidesService; +//import egovframework.itgcms.core.systemconfig.service.SystemconfigVO; +import egovframework.itgcms.util.CommUtil; + + +@Controller +public class CommonController { + + + /** MngrMenuService */ + @Resource(name = "mngrMenuService") + private MngrMenuService mngrMenuService; + + /** MngrSlidesService */ +// @Resource(name = "mngrSlidesService") +// private MngrSlidesService mngrSlidesService; + + private static final Logger logger = LogManager.getLogger(CommonController.class); + + /** + * 파일명과 코드로 직접 이미지를 출력함 + * f=암호화된 파일명 c=파일 인덱스 + * @param request + * @param response + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value="/comm/download.do") + public void download(HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException{ + String f = CommUtil.isNull(request.getParameter("f"),""); //f 구조는 index::폴더명::저장파일명::원본파일명 + + if("".equals(f) ){ + return; + } + + String []arrFile = CommUtil.getFileDec(f).split("::"); + if(arrFile.length < 3 ){ + return; + } + String downIndex = arrFile[0]; + String downFolder = arrFile[1]; + String downFileName = arrFile[2]; + String orgFileName = arrFile[3]; + File file = new File(CommUtil.getFileRoot()+ System.getProperty("file.separator") + downFolder + System.getProperty("file.separator") + downFileName); + + if (!file.exists()) { + logger.debug(file.getAbsolutePath()); + response.setContentType("text/html;charset=UTF-8"); + java.io.PrintWriter out = response.getWriter(); + out.println(CommUtil.getAlertHtml("파일이 없습니다.","history.back();")); + return; + } + + if (!file.isFile()) { + logger.debug(file.getAbsolutePath()); + response.setContentType("text/html;charset=UTF-8"); + java.io.PrintWriter out = response.getWriter(); + out.println(CommUtil.getAlertHtml("파일이 없습니다.","history.back();")); + return; + } + + +// if(!"".equals(c)){ +// HashMap hmParam = new HashMap(); +// hmParam.put("F_SAVENAME", downFileName); +// hmParam.put("F_IDX",c); +// HashMap result = commonService.selectFileuploadView(hmParam); +// if(result != null && !"".equals(CommUtil.isNull(result.get("F_ORGNAME"),""))){ +// orgFileName = CommUtil.isNull(result.get("F_ORGNAME"),""); +// } +// } + + int fSize = (int)file.length(); + if (fSize > 0) { + BufferedInputStream in = null; + FileInputStream fi = null; + + try { + fi = new FileInputStream(file); + in = new BufferedInputStream(fi); + +// response.setHeader("Content-Disposition", "attachment; filename=" + ("".equals(orgFileName) ? downFileName : orgFileName)); //new String(orgFileName.getBytes("euc-kr"),"8859_1")) + response.setContentType("application/unknown"); + response.setHeader("Content-Disposition", "attachment; filename=" + ("".equals(orgFileName) ? downFileName : new String(orgFileName.getBytes("euc-kr"),"8859_1"))); + response.setContentLength(fSize); + FileCopyUtils.copy(in, response.getOutputStream()); + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException ignore) { + logger.error("예외 상황 발생"); + } + } + fi.close(); + } + response.getOutputStream().flush(); + response.getOutputStream().close(); + } + } + /** + * 파일명과 코드로 직접 이미지를 출력함 + * f=파일명 c=코드명(tb_ 제외) + * @param request + * @param response + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value="/comm/viewImage.do") + public void viewImage(HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException{ + String f = CommUtil.isNull(request.getParameter("f"),""); //f 구조는 index::폴더명::저장파일명::원본파일명 + + if("".equals(f) ){ + return; + } + + String []arrFile = CommUtil.getFileDec(f).split("::"); + if(arrFile.length < 3 ){ + return; + } + String downIndex = arrFile[0]; + String downFolder = arrFile[1]; + String downFileName = arrFile[2]; + String orgFileName = arrFile[3]; + + File file = new File(CommUtil.getFileRoot()+ System.getProperty("file.separator") + downFolder + System.getProperty("file.separator") + downFileName); + + if (!file.exists()) { + logger.debug("이미지 파일 오류" + CommUtil.getFileRoot()+ System.getProperty("file.separator") + downFolder + System.getProperty("file.separator") + downFileName); + return ;//throw new FileNotFoundException(CommUtil.getFileRoot()+ System.getProperty("file.separator") + downFolder + System.getProperty("file.separator") + downFileName); + } + + if (!file.isFile()) { + logger.debug("이미지 파일 오류" + CommUtil.getFileRoot()+ System.getProperty("file.separator") + downFolder + System.getProperty("file.separator") + downFileName); + return ;//throw new FileNotFoundException(CommUtil.getFileRoot()+ System.getProperty("file.separator") + downFolder + System.getProperty("file.separator") + downFileName); + } + + int fSize = (int)file.length(); + if (fSize > 0) { + BufferedInputStream in = null; + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + in = new BufferedInputStream(fis); + String ext = (downFileName.substring(downFileName.lastIndexOf(".") + 1)); + String mimetype = "application/octet-stream"; //"application/x-msdownload" + if(CommUtil.regEx("(jpg|jpeg|gif|png|bmp)", ext.toLowerCase())){ + mimetype = "image/"+ext.toLowerCase(); + }else{ + return ; //이미지 보여주는 메소드이므로 이미지가 아니면 리턴. + } + response.setBufferSize(fSize); + response.setContentType(mimetype); + response.setHeader("Content-Disposition", "attachment; filename=" + downFileName); + response.setContentLength(fSize); + FileCopyUtils.copy(in, response.getOutputStream()); + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException ignore) { + logger.error("예외 상황 발생"); + } + } + fis.close(); + } + response.getOutputStream().flush(); + response.getOutputStream().close(); + } + } + + public String readContentFrom(String textFileName) throws IOException, SQLException, RuntimeException { + java.io.BufferedReader bufferedTextFileReader = new java.io.BufferedReader(new java.io.FileReader(textFileName)); + StringBuilder contentReceiver = new StringBuilder(); + + String line = null; + try{ + while ((line = bufferedTextFileReader.readLine()) != null) { + contentReceiver.append(line+"\n"); + } + }catch(IOException e){ + logger.error("예외 상황 발생"); + }finally{ + bufferedTextFileReader.close(); + } + + return contentReceiver.toString(); + } + + public void createFile(String textFileName, String content) throws IOException, SQLException, RuntimeException{ + java.io.FileWriter fw = null; + java.io.BufferedWriter bufferedWriter = null; + try{ + fw = new java.io.FileWriter(textFileName); + bufferedWriter = new java.io.BufferedWriter(fw); + bufferedWriter.write(content); + }catch(IOException e){ + logger.error("예외 상황 발생"); + }finally{ + bufferedWriter.close(); + fw.close(); + } + } + + @RequestMapping(value="/comm/sessionKeep.do") + public void sessionKeep(HttpServletRequest request, HttpServletResponse response, ModelMap model, HttpSession session) throws IOException, SQLException, RuntimeException{ + //세션 유지를 위한 가상페이지. + //등록 페이지에 10분마다 요청하도록함. 실제로 아무일도 하지않음. + } + + @RequestMapping(value="/post.do") + public void post(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException, SQLException, RuntimeException{ + String path = "c:\\post\\"; + File folder = new File(path); + File []files = folder.listFiles(); + StringBuffer sb = new StringBuffer(); + long z_no = 0l; + for(File file : files){ + + java.io.File file1 = null; + java.io.FileInputStream file1is = null; + java.io.InputStreamReader isr = null; + BufferedReader in = null; + + try{ + file1 = new java.io.File(path + file.getName()); + + file1is = new java.io.FileInputStream(file1); + isr = new java.io.InputStreamReader(file1is,"euc-kr"); + in = new BufferedReader(isr); + + String s = null; + int i = 0; + while ( (s = in.readLine()) != null ) { + if(i>0){ + z_no++; + String []str = s.split("\\|"); + HashMap hmParam = new HashMap();//#Z_NO#,#Z_ZIPCODE#,#Z_SIDO#,#Z_GUGUN#,#Z_UPMYUN#,#Z_ROAD#,#Z_BUILDING#,#Z_BUILDING_SUB#,#Z_DELIVER# + //우편번호|우편일련번호|시도|시도영문|시군구|시군구영문|읍면|읍면영문|도로명코드|도로명|도로명영문|지하여부|건물번호본번|건물번호부번|건물관리번호|다량배달처명|시군구용건물명|법정동코드|법정동명|리|산여부|지번본번|읍면동일련번호|지번부번 + // 135807| 022| 서울특별시|Seoul|강남구|Gangnam-gu|||116803122001|개포로|Gaepo-ro|0|303|0|1168010300106530000019474|현대1차아파트|현대1차아파트|1168010300|개포동||0|653|01|0 + hmParam.put("Z_NO", z_no); + hmParam.put("Z_ZIPCODE", str[0]); + hmParam.put("Z_SIDO", str[2]); + hmParam.put("Z_GUGUN", str[4]); + hmParam.put("Z_UPMYUN", str[6]); + hmParam.put("Z_ROAD", str[9]); + hmParam.put("Z_BUILDING", str[12]); + hmParam.put("Z_BUILDING_SUB", str[13]); + hmParam.put("Z_DELIVER", str[14]); + //commService.insertKoh("common.insertTestZip", hmParam); + //break; + } + i++; + + } + }catch(IOException e){ + logger.error("예외 상황 발생"); + }finally{ + file1is.close(); + isr.close(); + in.close(); + } + + } + } + + @RequestMapping(value="/comm/qr.do") + public void qr(HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException, WriterException{ + //response.sendRedirect("/web/main/index.do"); + QRCodeWriter qrCodeWriter = new QRCodeWriter(); + String port = ""; + if(!"80".equals(request.getServerPort())) port = ":" + request.getServerPort(); + String text = "MECARD:URL:" + request.getParameter("url"); + /* + MECARD:N:이름; + ORG:회사; + TEL:전화; + EMAIL:이메일; + NOTE:노트(설명); + URL:링크주소; + ADR:주소; + */ + text = new String(text.getBytes("UTF-8"), "ISO-8859-1"); + BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, 200, 200); + response.setContentType("image/png; charset=UTF-8"); + response.setHeader("Content-Disposition", "filename=noename.png"); + //out.clear(); + //out = pageContext.pushBody(); + MatrixToImageWriter.writeToStream(bitMatrix, "png", response.getOutputStream()); + } + + + /** + * 슬라이드 셋 인클루드 처리 + * @param mngrProgramSearchVO + * @param model + * @param programVO + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/module/slides/userInclude_SLIDES.do") + public ModelAndView userInclude_SLIDES(HttpServletRequest request, HttpSession session) throws IOException, SQLException, RuntimeException { + + ModelAndView mav = new ModelAndView(); + mav.setViewName("itgcms/global/slides/userInclude_SLIDES"); + + String root = request.getParameter("siteCode"); + +// SystemconfigVO systemconfigVO = CommUtil.getSystemconfigVO(request, "systemconfig"+root); + + ItgMap paramVO = new ItgMap(); +// paramVO.put("slidesIdx", CommUtil.isNull(systemconfigVO.getSlidesIdx(),"0")); + paramVO.put("useyn", "Y"); +// List slidesItemList = mngrSlidesService.mngrSlideItemList(paramVO); +// mav.addObject("slidesItemList", slidesItemList); + + return mav; + } +} diff --git a/src/main/java/egovframework/itgcms/common/CommonRestcontroller.java b/src/main/java/egovframework/itgcms/common/CommonRestcontroller.java new file mode 100644 index 0000000..27e324b --- /dev/null +++ b/src/main/java/egovframework/itgcms/common/CommonRestcontroller.java @@ -0,0 +1,78 @@ +package egovframework.itgcms.common; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +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.RestController; + +import egovframework.itgcms.core.menu.service.MngrMenuService; +import egovframework.itgcms.core.site.service.MngrSiteService; +import egovframework.itgcms.core.site.service.MngrSiteVO; +import egovframework.itgcms.core.systemconfig.service.SystemconfigVO; +import egovframework.itgcms.core.templeteconfig.service.TempleteconfigService; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +@RestController +public class CommonRestcontroller { + + @Resource(name = "mngrSiteService") + private MngrSiteService mngrSiteService; + @Resource(name = "mngrMenuService") + private MngrMenuService mngrMenuService; + @Resource(name = "templeteconfigService") + private TempleteconfigService tempService; + + @RequestMapping(value = "/_mngr_/mainBoardCheck.do", method={RequestMethod.GET,RequestMethod.POST}) + public Map mngrCheck(HttpServletRequest request, @RequestParam("siteCode") String siteCode, @RequestParam("templCode") String templCode) throws IOException, SQLException, RuntimeException { + + Map resultData = new HashMap<>(); + List siteList = mngrSiteService.mngrSiteList(); + siteCode = CommUtil.isNull(siteCode, ""); + + if("".equals(siteCode)){ + siteCode = siteList.get(0).getSiteCode(); + } + + List tmplList = tempService.templeteconfigList(); + + EgovMap tmp = null; + for ( EgovMap map : tmplList) { + if(map.get("tempCode").equals(templCode)){ + tmp = map; + break; + } + } + + if (tmp == null) tmplList.get(0); + + SystemconfigVO systemConf; + + try { + systemConf = (SystemconfigVO) CommUtil.getFileObject(request, "systemconfig".concat(siteCode)); + } catch(NullPointerException|ClassCastException e){ + CommUtil.setFileObject(request, new SystemconfigVO(), "systemconfig".concat(siteCode)); + systemConf = (SystemconfigVO) CommUtil.getFileObject(request, "systemconfig".concat(siteCode)); + } + EgovMap paramMap = new EgovMap(); + paramMap.put("siteCode", siteCode); + + resultData.put("boardNum", (String) tmp.get("recentBdCnt")); + resultData.put("menuDesc", mngrMenuService.getBoardListbySitecode(paramMap)); + + if (systemConf.getRecentBoardMap() != null && systemConf.getRecentBoardByTempCode(templCode) != null) { + resultData.put("selectedMenu", systemConf.getRecentBoardByTempCode(templCode)); + } + + return resultData; + } +} diff --git a/src/main/java/egovframework/itgcms/common/CustomDateHandler.java b/src/main/java/egovframework/itgcms/common/CustomDateHandler.java new file mode 100644 index 0000000..c73797b --- /dev/null +++ b/src/main/java/egovframework/itgcms/common/CustomDateHandler.java @@ -0,0 +1,45 @@ +package egovframework.itgcms.common; + +import java.sql.CallableStatement; +import java.sql.Date; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +public class CustomDateHandler extends BaseTypeHandler{ + + @Override + public Date getNullableResult(ResultSet rs, String columnName) throws SQLException { + Timestamp sqlTimestamp = rs.getTimestamp(columnName); + if (sqlTimestamp != null) { + return new Date(sqlTimestamp.getTime()); + } + return null; + } + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) + throws SQLException { + // TODO Auto-generated method stub + ps.setDate(i, parameter); + } + + @Override + public Date getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + // TODO Auto-generated method stub + return rs.getDate(columnIndex); + } + + @Override + public Date getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + // TODO Auto-generated method stub + return cs.getDate(columnIndex); + } + + + +} \ No newline at end of file diff --git a/src/main/java/egovframework/itgcms/common/DefaultVO.java b/src/main/java/egovframework/itgcms/common/DefaultVO.java new file mode 100644 index 0000000..6f77df7 --- /dev/null +++ b/src/main/java/egovframework/itgcms/common/DefaultVO.java @@ -0,0 +1,403 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.common; + +import java.io.IOException; +import java.io.Serializable; + +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; + +import egovframework.itgcms.util.CommUtil; + +/** + * @파일명 : DefaultVO.java + * @파일정보 : 게시판 공통 VO, 게시판에 사용되는 VO는 이 클래스를 상속 받는다. + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public class DefaultVO implements Serializable { + /** + * serialVersion UID + */ + private static final long serialVersionUID = -858838578081269359L; + + private static final Logger logger = LogManager.getLogger(DefaultVO.class); + //======================== 검색용 변수 =============================== + + /** 검색key */ + private String schId = ""; //검색조건 유지 + + /** 검색조건 */ + private String schFld = ""; //검색조건 유지 + + /** 검색Keyword */ + private String schStr = "";//검색조건 유지 + + /** 검색사용여부 */ + private String schUseYn = "";//검색조건 유지 + + /** 멤버아이디 */ + private String schMemid = "";//검색조건 유지 + + /** 검색옵션1 */ + private String schOpt1 = "";//검색조건 유지 + + /** 검색옵션2 */ + private String schOpt2 = "";//검색조건 유지 + + /** 검색옵션3 */ + private String schOpt3 = "";//검색조건 유지 + + /** 검색옵션4 */ + private String schOpt4 = "";//검색조건 유지 + + /** 검색옵션5 */ + private String schOpt5 = "";//검색조건 유지 + + /** 검색옵션6 */ + private String schOpt6 = "";//검색조건 유지 + + /** 검색옵션7 */ + private String schOpt7 = "";//검색조건 유지 + + /** 검색옵션8 */ + private String schOpt8 = "";//검색조건 유지 + + /** 검색옵션9 */ + private String schOpt9 = "";//검색조건 유지 + + /** 검색옵션10 */ + private String schOpt10 = "";//검색조건 유지 + + /** 로그인멤버아이디 */ + private String logMemid = "";//검색조건 유지 + + /** 현재페이지 */ + private String page = "1";//검색조건 유지 + + /** 정렬 필드 */ + private String ordFld = "";//검색조건 유지 + + /** 정렬 구분, desc:내림, asc:올림 */ + private String ordBy = "";//검색조건 유지 + + /** 상태 */ + private String act = ""; + + /** 기타1 */ + private String etc1 = ""; + + /** 기타2 */ + private String etc2 = ""; + + /** 목록 갯수 */ + private String viewCount = "10";//검색조건 유지 + + /** 사이트코드 */ + private String schSitecode = ""; + + /** 라이센스타입 */ + private String schLicenseType = ""; + + /** 목록에서 게시물 다중선택 */ + private String[] chkId; + + private String schM = ""; + + private String excelDown = ""; // 일반 목록은 "", 엑셀다운은 excel, list쿼리에서 일반 목록과 엑셀다운목록을 구분하기 위해. + //======================== 설정용 변수 =============================== + /** 페이지갯수 페이지에 보여줄 게시물 갯수 */ + private int pageUnit = 10; + + /** 페이지사이즈 한 페이지에 보여줄 페이지 갯수 5 = << < 1 2 3 4 5 > >> */ + private int pageSize = 10; + + /** firstIndex */ + private int firstIndex = 1; + + /** lastIndex */ + private int lastIndex = 1; + + /** recordCountPerPage 페이지에 보여줄 게시물 갯수 pageUnit과 동일*/ + private int recordCountPerPage = 10; + + public String getSchId() { + return schId; + } + public void setSchId(String schId) { + this.schId = schId; + } + public String getSchFld() { + return schFld; + } + public void setSchFld(String schFld) { + this.schFld = schFld; + } + public String getSchStr() { + return CommUtil.stripXss(schStr); + } + public void setSchStr(String schStr) { + this.schStr = CommUtil.stripXss(schStr); + } + public String getSchUseYn() { + return schUseYn; + } + public void setSchUseYn(String schUseYn) { + this.schUseYn = schUseYn; + } + public String getSchMemid() { + return schMemid; + } + public void setSchMemid(String schMemid) { + this.schMemid = schMemid; + } + public String getSchOpt1() { + return schOpt1; + } + public void setSchOpt1(String schOpt1) { + this.schOpt1 = schOpt1; + } + public String getSchOpt2() { + return schOpt2; + } + public void setSchOpt2(String schOpt2) { + this.schOpt2 = schOpt2; + } + public String getSchOpt3() { + return schOpt3; + } + public void setSchOpt3(String schOpt3) { + this.schOpt3 = schOpt3; + } + public String getSchOpt4() { + return schOpt4; + } + public void setSchOpt4(String schOpt4) { + this.schOpt4 = schOpt4; + } + public String getSchOpt5() { + return schOpt5; + } + public void setSchOpt5(String schOpt5) { + this.schOpt5 = schOpt5; + } + public String getSchOpt6() { + return schOpt6; + } + public String getSchOpt7() { + return schOpt7; + } + public String getSchOpt8() { + return schOpt8; + } + public String getSchOpt9() { + return schOpt9; + } + public String getSchOpt10() { + return schOpt10; + } + public void setSchOpt6(String schOpt6) { + this.schOpt6 = schOpt6; + } + public void setSchOpt7(String schOpt7) { + this.schOpt7 = schOpt7; + } + public void setSchOpt8(String schOpt8) { + this.schOpt8 = schOpt8; + } + public void setSchOpt9(String schOpt9) { + this.schOpt9 = schOpt9; + } + public void setSchOpt10(String schOpt10) { + this.schOpt10 = schOpt10; + } + public String getLogMemid() { + return logMemid; + } + public void setLogMemid(String logMemid) { + this.logMemid = logMemid; + } + public String getPage() { + return page; + } + public void setPage(String page) { + if(!"".equals(CommUtil.isNull(page, "")) + && !CommUtil.regEx("[^0-9]", page) //빈값 또는 0-9중의 숫자가 아닌경우 전달받은 변수를 대입하지 않는다(기본값을 그냥 사용) + ){ + this.page = page; + } + } + public String getSchSitecode() { + return schSitecode; + } + public void setSchSitecode(String schSitecode) { + this.schSitecode = schSitecode; + } + 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 String getOrdFld() { + return ordFld; + } + public void setOrdFld(String ordFld) { + this.ordFld = ordFld; + if(ordFld != null && !"".equals(ordFld)){ + if(CommUtil.regEx("[^a-zA-Z0-9_.]", ordFld)){ + this.ordFld = ""; + } + } + } + public String getOrdBy() { + return ordBy; + } + public void setOrdBy(String ordBy) { + this.ordBy = ordBy; + if(ordBy != null && !"".equals(ordBy)){ + if(!"asc".equals(ordBy.toLowerCase()) && !"desc".equals(ordBy.toLowerCase())){ + this.ordBy = ""; + } + } + } + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + public String getAct() { + return act; + } + public void setAct(String act) { + this.act = act; + } + public String getEtc1() { + return etc1; + } + public void setEtc1(String etc1) { + this.etc1 = etc1; + } + public String getEtc2() { + return etc2; + } + public void setEtc2(String etc2) { + this.etc2 = etc2; + } + public String getViewCount() { + return viewCount; + } + public void setViewCount(String viewCount) { + if(!"".equals(CommUtil.isNull(viewCount, "")) + && !CommUtil.regEx("[^0-9]", viewCount) //빈값 또는 0-9중의 숫자가 아닌경우 전달받은 변수를 대입하지 않는다(기본값을 그냥 사용) + ){ + this.viewCount = viewCount; + } + } + public String[] getChkId() { + String[] ret = null; + if (this.chkId != null) { + ret = new String[chkId.length]; + for (int i = 0; i < chkId.length; i++) { + ret[i] = this.chkId[i]; + } + } + return ret; + } + public void setChkId(String[] chkId) { + this.chkId = new String[chkId.length]; + for(int i = 0; i < chkId.length; ++i) this.chkId[i] = chkId[i]; + } + public String getSchM() { + return schM; + } + public void setSchM(String schM) { + this.schM = schM; + } + public String getSchLicenseType() { + return schLicenseType; + } + public void setSchLicenseType(String schLicenseType) { + this.schLicenseType = schLicenseType; + } + public String getExcelDown() { + return excelDown; + } + public void setExcelDown(String excelDown) { + this.excelDown = excelDown; + } + public String queryString(){ + String query = ""; + try{ + if(!"".equals(java.net.URLEncoder.encode(this.schId, "UTF-8"))){ query += "&schId=" + java.net.URLEncoder.encode(this.schId, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schFld, "UTF-8"))){ query += "&schFld=" + java.net.URLEncoder.encode(this.schFld, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schStr, "UTF-8"))){ query += "&schStr=" + java.net.URLEncoder.encode(this.schStr, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schUseYn, "UTF-8"))){ query += "&schUseYn=" + java.net.URLEncoder.encode(this.schUseYn, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schMemid, "UTF-8"))){ query += "&schMemid=" + java.net.URLEncoder.encode(this.schMemid, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schOpt1, "UTF-8"))){ query += "&schOpt1=" + java.net.URLEncoder.encode(this.schOpt1, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schOpt2, "UTF-8"))){ query += "&schOpt2=" + java.net.URLEncoder.encode(this.schOpt2, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schOpt3, "UTF-8"))){ query += "&schOpt3=" + java.net.URLEncoder.encode(this.schOpt3, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schOpt4, "UTF-8"))){ query += "&schOpt4=" + java.net.URLEncoder.encode(this.schOpt4, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schOpt5, "UTF-8"))){ query += "&schOpt5=" + java.net.URLEncoder.encode(this.schOpt5, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schOpt6, "UTF-8"))){ query += "&schOpt6=" + java.net.URLEncoder.encode(this.schOpt6, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schOpt7, "UTF-8"))){ query += "&schOpt7=" + java.net.URLEncoder.encode(this.schOpt7, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schOpt8, "UTF-8"))){ query += "&schOpt8=" + java.net.URLEncoder.encode(this.schOpt8, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schOpt9, "UTF-8"))){ query += "&schOpt9=" + java.net.URLEncoder.encode(this.schOpt9, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schOpt10, "UTF-8"))){ query += "&schOpt10=" + java.net.URLEncoder.encode(this.schOpt10, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schSitecode, "UTF-8"))){ query += "&schSitecode=" + java.net.URLEncoder.encode(this.schSitecode, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schLicenseType, "UTF-8"))){ query += "&schLicenseType=" + java.net.URLEncoder.encode(this.schLicenseType, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.schM, "UTF-8"))){ query += "&schM=" + java.net.URLEncoder.encode(this.schM, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.act, "UTF-8"))){ query += "&act=" + java.net.URLEncoder.encode(this.act, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.page, "UTF-8"))){ query += "&page=" + java.net.URLEncoder.encode(this.page, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.ordFld, "UTF-8"))){ query += "&ordFld=" + java.net.URLEncoder.encode(this.ordFld, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.ordBy, "UTF-8"))){ query += "&ordBy=" + java.net.URLEncoder.encode(this.ordBy, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.viewCount, "UTF-8"))){ query += "&viewCount=" + java.net.URLEncoder.encode(this.viewCount, "UTF-8");} + }catch(IOException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/common/ItgMap.java b/src/main/java/egovframework/itgcms/common/ItgMap.java new file mode 100644 index 0000000..1de9851 --- /dev/null +++ b/src/main/java/egovframework/itgcms/common/ItgMap.java @@ -0,0 +1,15 @@ +package egovframework.itgcms.common; + +import egovframework.rte.psl.dataaccess.util.EgovMap; + +public class ItgMap extends EgovMap { + + public Object replace(Object key, Object value){ + Object curValue; + if (((curValue = get(key)) != null) || containsKey(key)) { + curValue = super.put(key, value); + } + return curValue; + } + +} diff --git a/src/main/java/egovframework/itgcms/common/MngrManagerLogAOP.java b/src/main/java/egovframework/itgcms/common/MngrManagerLogAOP.java new file mode 100644 index 0000000..77a3c96 --- /dev/null +++ b/src/main/java/egovframework/itgcms/common/MngrManagerLogAOP.java @@ -0,0 +1,91 @@ +package egovframework.itgcms.common; + +import java.io.IOException; +import java.sql.SQLException; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.aspectj.lang.JoinPoint; +import org.springframework.beans.factory.annotation.Autowired; + +import egovframework.itgcms.core.managerlog.service.MngrManagerLogService; +import egovframework.itgcms.core.managerlog.service.MngrManagerLogVO; +import egovframework.itgcms.util.CommUtil; +public class MngrManagerLogAOP { + @Autowired + HttpServletRequest request; + + /** MngrAuthorityService */ + @Resource(name = "mngrManagerLogService") + private MngrManagerLogService mngrManagerLogService; + + private static final Logger logger = LogManager.getLogger(MngrManagerLogAOP.class); + + public void mngrAopSelect(JoinPoint thisJoinPoint) throws IOException, SQLException{ + if("".equals(CommUtil.getMngrMemId())) return; //관리자 아이디가 없으면 로그저장 안함 + try { + MngrManagerLogVO mngrManagerLogVO = getManagerLog(thisJoinPoint, "R"); + if(CommUtil.isNull(mngrManagerLogVO.getMlogUrl(), "null").indexOf("_mngr_") != -1){ + mngrManagerLogService.mngrManagerLogInsert(mngrManagerLogVO); + } + } catch (IOException e) { + logger.error("예외 상황 발생");; + } + } + public void mngrAopInsert(JoinPoint thisJoinPoint) throws IOException, SQLException{ +// if("".equals(CommUtil.getMngrMemId())) return; //관리자 아이디가 없으면 로그저장 안함 + if("".equals("")) return; + try { + MngrManagerLogVO mngrManagerLogVO = getManagerLog(thisJoinPoint, "C"); + if(CommUtil.isNull(mngrManagerLogVO.getMlogUrl(), "null").indexOf("_mngr_") != -1){ + mngrManagerLogService.mngrManagerLogInsert(mngrManagerLogVO); + } + } catch (IOException e) { + logger.error("예외 상황 발생");; + } + } + public void mngrAopUpdate(JoinPoint thisJoinPoint) throws IOException, SQLException{ + if("".equals(CommUtil.getMngrMemId())) return; //관리자 아이디가 없으면 로그저장 안함 + try { + MngrManagerLogVO mngrManagerLogVO = getManagerLog(thisJoinPoint, "U"); + if(CommUtil.isNull(mngrManagerLogVO.getMlogUrl(), "null").indexOf("_mngr_") != -1){ + mngrManagerLogService.mngrManagerLogInsert(mngrManagerLogVO); + } + } catch (IOException e) { + logger.error("예외 상황 발생");; + } + } + public void mngrAopDelete(JoinPoint thisJoinPoint) throws IOException, SQLException{ + if("".equals(CommUtil.getMngrMemId())) return; //관리자 아이디가 없으면 로그저장 안함 + try { + MngrManagerLogVO mngrManagerLogVO = getManagerLog(thisJoinPoint, "D"); + if(CommUtil.isNull(mngrManagerLogVO.getMlogUrl(), "null").indexOf("_mngr_") != -1){ + mngrManagerLogService.mngrManagerLogInsert(mngrManagerLogVO); + } + } catch (IOException e) { + logger.error("예외 상황 발생");; + } + } + + private MngrManagerLogVO getManagerLog(JoinPoint thisJoinPoint, String logType) throws IOException, SQLException{ + MngrManagerLogVO mngrManagerLogVO = new MngrManagerLogVO(); + mngrManagerLogVO.setMlogClass( thisJoinPoint.getTarget().getClass().getName() ); + mngrManagerLogVO.setMlogMethod( thisJoinPoint.getSignature().getName() ); + mngrManagerLogVO.setMlogType(logType); + mngrManagerLogVO.setMngId(CommUtil.getMngrMemId()); + mngrManagerLogVO.setMngName(CommUtil.getMngrSessionVO().getName()); + mngrManagerLogVO.setMlogIp(CommUtil.getClientIP(request)); + mngrManagerLogVO.setMlogReferer(request.getHeader("REFERER")); + + String url = request.getRequestURL().toString(); + if(url != null && request.getQueryString() != null){ + url += "?" + request.getQueryString(); + } + mngrManagerLogVO.setMlogUrl(url); + + return mngrManagerLogVO; + } +} diff --git a/src/main/java/egovframework/itgcms/common/MngrSessionVO.java b/src/main/java/egovframework/itgcms/common/MngrSessionVO.java new file mode 100644 index 0000000..3a29cb1 --- /dev/null +++ b/src/main/java/egovframework/itgcms/common/MngrSessionVO.java @@ -0,0 +1,116 @@ +package egovframework.itgcms.common; + +import java.io.Serializable; + +public class MngrSessionVO implements Serializable{ + + /** + * 관리자 세션 정보 + */ + private static final long serialVersionUID = 2770149179317205761L; + /** 아이디 */ + String id = ""; + /** 이름 */ + String name = ""; + /** 이메일 */ + String email = ""; + /** 전화번호 */ + String phone = ""; + /** 부서 */ + String group = ""; + /** 직위 */ + String position = ""; + /** 컨텐츠권한 */ + String authority = ""; + /** 관리자 구분 */ + String type = ""; + /** 그룹명 */ + String groupName = ""; + /** 직위명 */ + String positionName = ""; + /** 관리권한(관리메뉴)*/ + String mngPower = ""; + /** 관리자 등급*/ + String mngAuth = ""; + /** 관리자 등급*/ + String licenseType = ""; + + public String getLicenseType() { + return licenseType; + } + public void setLicenseType(String licenseType) { + this.licenseType = licenseType; + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getEmail() { + return email; + } + public void setEmail(String email) { + this.email = email; + } + public String getPhone() { + return phone; + } + public void setPhone(String phone) { + this.phone = phone; + } + public String getGroup() { + return group; + } + public void setGroup(String group) { + this.group = group; + } + public String getPosition() { + return position; + } + public void setPosition(String position) { + this.position = position; + } + public String getAuthority() { + return authority; + } + public void setAuthority(String authority) { + this.authority = authority; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public String getGroupName() { + return groupName; + } + public void setGroupName(String groupName) { + this.groupName = groupName; + } + public String getPositionName() { + return positionName; + } + public void setPositionName(String positionName) { + this.positionName = positionName; + } + public String getMngPower() { + return mngPower; + } + public void setMngPower(String mngPower) { + this.mngPower = mngPower; + } + public String getMngAuth() { + return mngAuth; + } + public void setMngAuth(String mngAuth) { + this.mngAuth = mngAuth; + } +} diff --git a/src/main/java/egovframework/itgcms/common/SystemInit.java b/src/main/java/egovframework/itgcms/common/SystemInit.java new file mode 100644 index 0000000..34b2542 --- /dev/null +++ b/src/main/java/egovframework/itgcms/common/SystemInit.java @@ -0,0 +1,43 @@ +package egovframework.itgcms.common; + + +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; + +import org.springframework.context.annotation.Configuration; + +import egovframework.itgcms.util.CommUtil; + +public class SystemInit extends javax.servlet.http.HttpServlet { + public SystemInit(){ + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(""); + CommUtil.p(super.getServletContext()); + + } + +} diff --git a/src/main/java/egovframework/itgcms/common/UserAOP.java b/src/main/java/egovframework/itgcms/common/UserAOP.java new file mode 100644 index 0000000..949dec2 --- /dev/null +++ b/src/main/java/egovframework/itgcms/common/UserAOP.java @@ -0,0 +1,78 @@ +package egovframework.itgcms.common; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import egovframework.itgcms.core.menu.service.MngrMemIpManageVO; +import egovframework.itgcms.core.menu.service.impl.MngrMemIPManageMapper; + +@Component +@Aspect +public class UserAOP { + + private static final Logger logger = LogManager.getLogger(UserAOP.class); + + public UserAOP() { +// logger.info("UserAOP 생성"); + } + + @Resource(name="mngrMemIPManageMapper") + private MngrMemIPManageMapper mngrMemIPManageMapper; + + @Autowired + HttpServletRequest request; + + /* + * 회원 IP를 확인하는 AOP + * user 패키지의 모든 컨트롤러 + * 해당 AOP의 결과값을 제대로 리턴 받기 위해서는 해당 JoinPoint에 HttpServletResponse를 파라미터에 포함시켜야함. + */ + @Around("execution(* egovframework.itgcms.user.*.web.*Controller.*(..))") + private Object aroundUserPackageCheckIP(ProceedingJoinPoint joinPoint) throws Throwable{ + + String siteCode = request.getRequestURI().split("/")[1]; + String userIp = request.getRemoteAddr(); + + HttpSession session = request.getSession(); + MngrMemIpManageVO ipManager = null; + boolean ipCheck = false; + HttpServletResponse response = null; + + // DB 쿼리 숫자를 줄여주기 위해 세션에 IP체크 여부를 저장하여 사용 + if (session.getAttribute("ipCheck")==null) { + ipManager =mngrMemIPManageMapper.mngrIPManageBySiteCode(siteCode); + if (ipManager!=null) { + ipCheck = ipManager.checkVaildIP(userIp); + session.setAttribute("ipCheck", ipCheck); + } + } + + Object returnVal = joinPoint.proceed(); + + if (!(boolean)session.getAttribute("ipCheck")) { + // joinPoint(컨트롤러 메소드)의 파라미터 중 response 객체를 추출함 + for (Object obj : joinPoint.getArgs()) { + if (obj instanceof HttpServletResponse) { + response = (HttpServletResponse)obj; + } + } + // 추출한 response에 404에러를 보냄 + response.sendError(HttpServletResponse.SC_NOT_FOUND); + } + + return returnVal; + } + + + +} diff --git a/src/main/java/egovframework/itgcms/common/UserSessionVO.java b/src/main/java/egovframework/itgcms/common/UserSessionVO.java new file mode 100644 index 0000000..144c15d --- /dev/null +++ b/src/main/java/egovframework/itgcms/common/UserSessionVO.java @@ -0,0 +1,103 @@ +package egovframework.itgcms.common; + +import java.io.Serializable; + +public class UserSessionVO implements Serializable{ + + /** + * 사용자 세션 정보 + */ + private static final long serialVersionUID = -2654714480050608809L; + + /** 아이디 */ + String id = ""; + /** 이름 */ + String name = ""; + /** 이메일 */ + String email = ""; + /** 전화번호 */ + String phone = ""; + /** REG ID */ + String regId = ""; + /** 차량번호 */ + String vhcleNo = ""; + /** 차대번호 */ + String vin = ""; + /** 차량 관리번호 */ + String vhmno = ""; + /** 회원번호 */ + String mberNo = ""; + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + public String getEmail() { + return email; + } + + public String getPhone() { + return phone; + } + + public String getRegId() { + return regId; + } + + public String getVhcleNo() { + return vhcleNo; + } + + public String getVin() { + return vin; + } + + public String getVhmno() { + return vhmno; + } + + public String getMberNo() { + return mberNo; + } + + public void setId(String id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + public void setEmail(String email) { + this.email = email; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public void setRegId(String regId) { + this.regId = regId; + } + + public void setVhcleNo(String vhcleNo) { + this.vhcleNo = vhcleNo; + } + + public void setVin(String vin) { + this.vin = vin; + } + + public void setVhmno(String vhmno) { + this.vhmno = vhmno; + } + + public void setMberNo(String mberNo) { + this.mberNo = mberNo; + } + +} diff --git a/src/main/java/egovframework/itgcms/common/del_ExcelDownLoad.java b/src/main/java/egovframework/itgcms/common/del_ExcelDownLoad.java new file mode 100644 index 0000000..e80f990 --- /dev/null +++ b/src/main/java/egovframework/itgcms/common/del_ExcelDownLoad.java @@ -0,0 +1,750 @@ +package egovframework.itgcms.common; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +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.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.servlet.ModelAndView; + +import egovframework.itgcms.core.board.service.BoardService; +import egovframework.itgcms.core.board.service.BoardVO; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigService; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigVO; +//import egovframework.itgcms.core.member.service.MemberService; +import egovframework.itgcms.core.member.service.MemberVO; +//import egovframework.itgcms.core.stats.service.MngrCountVO; +//import egovframework.itgcms.core.stats.service.MngrStatsService; +import egovframework.itgcms.util.CommUtil; +import egovframework.itgcms.util.ExcelDownloadView; + +@Controller +public class del_ExcelDownLoad { + + /** MngrSiteService */ +// @Resource(name = "mngrStatsService") +// private MngrStatsService mngrStatsService; +// +//// /** MemberService */ +//// @Resource(name = "memberService") +//// private MemberService memberService; +// +// @Resource(name="boardService") +// private BoardService boardService; +// +// @Resource(name="mngrBoardconfigService") +// private MngrBoardconfigService boardConfigService; +// /** +// * 엑셀 파일명 규칙 +// * ex) //adminStatus.do +// * +// * 1. method : aStatusExcelDownload +// * 2. URL : /excel/aStatusExcelDownload.do +// * 3. 엑셀파일명 : admin.aStatusExcelDownload.xls +// * 4. 템플릿이름 : admin +// * +// **/ +// +// +// /** +// * 회원정보 엑셀 다운로드 +// * @param searchVO +// * @return +// */ +// @RequestMapping(value = "/excel/mngrMemberExcelDown.do", method = RequestMethod.POST) +// public ModelAndView mngrMemberExcelDownload(@ModelAttribute("memberVO") MemberVO searchVO, HttpServletRequest request) { +// +// ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); +// Map paramMap = CommUtil.getParameterMap(request); +// +// /************************ 출력목록 ************************/ +//// paramMap.put("dataList",memberService.selectMemberList(searchVO)); +// //엑셀 템플릿에 넘겨줄 데이타 +// mav.addObject("data", paramMap); +// +// //다운로드에 사용되어질 엑셀파일 템플릿 +// mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, CommUtil.getExcelTemplateName(request, "mngr")); +// //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) +// mav.addObject(ExcelDownloadView.DOWN_FILE_NM, "회원내역_" + CommUtil.getDatePattern("yyyy-MM-dd")); +// +// searchVO.setSchExcel("N"); +// return mav; +// } +// +// /** +// * 관리자 - 날짜별 접속자 현황 목록 엑셀다운로드 +// * @param +// * @param model +// * @return +// * @throws IOException, SQLException +// */ +// @RequestMapping(value="/excel/mngrStatsDateExcelDown.do") +// public ModelAndView mngrStatsDateExcelDown(MngrCountVO paramCountVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException { +// +// ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); +// +// Map paramMap = CommUtil.getParameterMap(request); +// +// /************************ 출력목록 ************************/ +// +// if("".equals(paramCountVO.getSchOption())){ +// paramCountVO.setSchOption("DAY_M"); +// } +// +// //String schDate = CommUtil.getDatePattern("yyyy-MM-dd hh"); +// +// String schDate = CommUtil.isNull(paramCountVO.getSchDate(), ""); +// if("".equals(schDate)){ +// schDate = CommUtil.getDatePattern("yyyy-MM-dd"); +// +// } +// +// String date = CommUtil.getDateforStat(schDate, paramCountVO.getSchOption()); +// String cntOptName=""; +// +// String dateArr[] = date.split("-"); +// +// if("HOUR".equals(paramCountVO.getSchOption())){ +// cntOptName = "시간단위"; +// paramCountVO.setCntOption("HOUR"); +// paramCountVO.setCntYear(dateArr[0]); +// paramCountVO.setCntMonth(dateArr[1]); +// paramCountVO.setCntDay(dateArr[2]); +// paramCountVO.setSchDate(dateArr[0]+"-"+dateArr[1]+"-"+dateArr[2]); +///* }else if("DAY_W".equals(paramCountVO.getSchOption())){ +// paramCountVO.setCntOption("DAY"); +// paramCountVO.setCntYear(dateArr[0]); +// paramCountVO.setCntMonth(dateArr[1]);*/ +// }else if("DAY_M".equals(paramCountVO.getSchOption())){ +// cntOptName = "일단위"; +// paramCountVO.setCntOption("DAY"); +// paramCountVO.setCntYear(dateArr[0]); +// paramCountVO.setCntMonth(dateArr[1]); +// paramCountVO.setSchDate(dateArr[0]+"-"+dateArr[1]); +// }else if("MONTH".equals(paramCountVO.getSchOption())){ +// cntOptName = "월단위"; +// paramCountVO.setCntOption("MONTH"); +// paramCountVO.setCntYear(dateArr[0]); +// paramCountVO.setSchDate(dateArr[0]); +// }else if("YEAR".equals(paramCountVO.getSchOption())){ +// cntOptName = "년단위"; +// paramCountVO.setCntOption("YEAR"); +// } +// +// List resultList = mngrStatsService.mngrDateCountList(paramCountVO); +// +// /************************ E: 출력목록 ************************/ +// +// +// /************************ S: 엑셀출력목록저장 ************************/ +// +// paramMap.put("dataList",resultList); +// +// //시작일~종료일 +// paramMap.put("schDate",paramCountVO.getSchDate()); +// paramMap.put("cntOptName",cntOptName); +// +// //엑셀 템플릿에 넘겨줄 데이타 +// mav.addObject("data", paramMap); +// +// //다운로드에 사용되어질 엑셀파일 템플릿 +// mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, CommUtil.getExcelTemplateName(request, "mngr")); +// //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) +// mav.addObject(ExcelDownloadView.DOWN_FILE_NM, "날짜("+paramCountVO.getCntOption()+")별 접속통계_"+ CommUtil.getDatePattern("yyyy-MM-dd")); +// +// return mav; +// +// } +// +// /** +// * 관리자 - 기간별 접속자 현황 목록 엑셀다운로드 +// * @param +// * @param model +// * @return +// * @throws IOException, SQLException +// */ +// @RequestMapping(value="/excel/mngrStatsTermExcelDown.do") +// public ModelAndView mngrStatsTermExcelDown(MngrCountVO paramCountVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException { +// +// ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); +// +// Map paramMap = CommUtil.getParameterMap(request); +// +// /************************ S: 출력목록 ************************/ +// +// if("".equals(paramCountVO.getSchOption())){ +// paramCountVO.setSchOption("DAY_M"); +// } +// +// String schDateFrom = CommUtil.isNull(paramCountVO.getSchDateFrom(), ""); +// if("".equals(schDateFrom)){ +// schDateFrom = CommUtil.getDatePattern("yyyy-MM-dd"); +// } +// +// String schDateEnd = CommUtil.isNull(paramCountVO.getSchDateEnd(), ""); +// if("".equals(schDateEnd)){ +// schDateEnd = CommUtil.getDatePattern("yyyy-MM-dd"); +// } +// +// String dateFrom = CommUtil.getDateforStat(schDateFrom, paramCountVO.getSchOption()); +// String dateEnd = CommUtil.getDateforStat(schDateEnd, paramCountVO.getSchOption()); +// String cntOptName=""; +// String cntOptTitle=""; +// +// paramCountVO.setSchDateFrom(dateFrom); +// paramCountVO.setSchDateEnd(dateEnd); +// +// String dateFromArr[] = dateFrom.split("-"); +// String dateEndArr[] = dateEnd.split("-"); +// +// if("HOUR".equals(paramCountVO.getSchOption())){ +// cntOptName = "시간단위"; +// cntOptTitle = "시간"; +// paramCountVO.setCntOption("HOUR"); +// paramCountVO.setStartDate(dateFromArr[0]+"-"+dateFromArr[1]+"-"+dateFromArr[2]); +// +// int lastDate = Integer.parseInt(dateEndArr[2])+1; +// String lastDateStr = ""; +// if(lastDate<10){ +// lastDateStr += "0"+lastDate; +// }else{ +// lastDateStr += lastDate; +// } +// paramCountVO.setEndDate(dateEndArr[0]+"-"+dateEndArr[1]+"-"+lastDateStr); +// }else if("DAY_M".equals(paramCountVO.getSchOption())){ +// cntOptName = "일단위"; +// cntOptTitle = "일자"; +// paramCountVO.setCntOption("DAY"); +// paramCountVO.setStartDate(dateFromArr[0]+"-"+dateFromArr[1]); +// int lastDate = Integer.parseInt(dateEndArr[1])+1; +// String lastDateStr = ""; +// if(lastDate<10){ +// lastDateStr += "0"+lastDate; +// }else{ +// lastDateStr += lastDate; +// } +// paramCountVO.setEndDate(dateEndArr[0]+"-"+lastDateStr); +// } else if("DAY_W".equals(paramCountVO.getSchOption())){ +// paramCountVO.setCntOption("DAY"); +// paramCountVO.setStartDate(dateFromArr[0]+"-"+dateFromArr[1]); +// cntOptName = "요일 단위"; +// cntOptTitle = "요일"; +// int lastDate = Integer.parseInt(dateEndArr[1])+1; +// String lastDateStr = ""; +// if(lastDate<10){ +// lastDateStr += "0"+lastDate; +// }else{ +// lastDateStr += lastDate; +// } +// paramCountVO.setEndDate(dateEndArr[0]+"-"+lastDateStr); +// }else if("MONTH".equals(paramCountVO.getSchOption())){ +// cntOptName = "월단위"; +// cntOptTitle = "월"; +// paramCountVO.setCntOption("MONTH"); +// paramCountVO.setStartDate(dateFromArr[0]); +// int lastDate = Integer.parseInt(dateEndArr[0])+1; +// String lastDateStr = ""; +// if(lastDate<10){ +// lastDateStr += "0"+lastDate; +// }else{ +// lastDateStr += lastDate; +// } +// paramCountVO.setEndDate(lastDateStr); +// }else if("YEAR".equals(paramCountVO.getSchOption())){ +// cntOptName = "년단위"; +// cntOptTitle = "년"; +// paramCountVO.setCntOption("YEAR"); +// paramCountVO.setStartDate(dateFromArr[0]); +// String lastDateStr =""+(Integer.parseInt(dateEndArr[0])+1); +// paramCountVO.setEndDate(lastDateStr); +// } +// +// List resultList = mngrStatsService.mngrTermCountList(paramCountVO); +// +// /************************ E: 출력목록 ************************/ +// +// +// /************************ S: 엑셀출력목록저장 ************************/ +// paramMap.put("dataList",resultList); +// +// //시작일~종료일 +// paramMap.put("startDate",dateFrom); +// paramMap.put("endDate",dateEnd); +// paramMap.put("cntOptName",cntOptName); +// paramMap.put("cntOptTitle",cntOptTitle); +// +// //엑셀 템플릿에 넘겨줄 데이타 +// mav.addObject("data", paramMap); +// +// //다운로드에 사용되어질 엑셀파일 템플릿 +// mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, CommUtil.getExcelTemplateName(request, "mngr")); +// //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) +// mav.addObject(ExcelDownloadView.DOWN_FILE_NM, "기간("+paramCountVO.getCntOption()+")별 접속통계_"+ CommUtil.getDatePattern("yyyy-MM-dd")); +// +// return mav; +// +// } +// +// /** +// * 관리자 - 옵션별 접속자 현황 목록 엑셀다운로드 +// * @param +// * @param model +// * @return +// * @throws IOException, SQLException +// */ +// @RequestMapping(value="/excel/mngrStatsOptExcelDown.do") +// public ModelAndView mngrStatsOptExcelDown(MngrCountVO paramCountVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException { +// +// ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); +// +// Map paramMap = CommUtil.getParameterMap(request); +// String optNm = ""; +// //"DEVICE","OS","BROWSER","SEARCHENGINE" +// +// if("DEVICE".equals(paramCountVO.getSchOption()))optNm = "단말기"; +// else if("OS".equals(paramCountVO.getSchOption()))optNm = "운영체제"; +// else if("BROWSER".equals(paramCountVO.getSchOption()))optNm = "브라우저"; +// else if("SEARCHENGINE".equals(paramCountVO.getSchOption()))optNm = "검색엔진"; +// /************************ 출력목록 ************************/ +// +// paramCountVO.setCntOption(paramCountVO.getSchOption()); +// +// List resultList = mngrStatsService.mngrOptionCountList(paramCountVO); +// +// /************************ E: 출력목록 ************************/ +// +// +// /************************ S: 엑셀출력목록저장 ************************/ +// +// paramMap.put("dataList",resultList); +// paramMap.put("optNm",optNm); +// +// +// +// +// //엑셀 템플릿에 넘겨줄 데이타 +// mav.addObject("data", paramMap); +// +// //다운로드에 사용되어질 엑셀파일 템플릿 +// mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, CommUtil.getExcelTemplateName(request, "mngr")); +// //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) +// mav.addObject(ExcelDownloadView.DOWN_FILE_NM, optNm+"별 접속통계_"+ CommUtil.getDatePattern("yyyy-MM-dd")); +// +// return mav; +// +// } +// +// /** +// * 관리자 - 기간별 접속자 현황 목록 엑셀다운로드 +// * @param +// * @param model +// * @return +// * @throws IOException, SQLException +// */ +// @RequestMapping(value="/excel/mngrStatsMenuExcelDown.do") +// public ModelAndView mngrStatsMenuExcelDown(MngrCountVO paramCountVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException { +// +// ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); +// +// Map paramMap = CommUtil.getParameterMap(request); +// +// /************************ S: 출력목록 ************************/ +// +// String schDateFrom = CommUtil.isNull(paramCountVO.getSchDateFrom(), ""); +// if("".equals(schDateFrom)){ +// schDateFrom = CommUtil.getDatePattern("yyyy-MM-dd"); +// } +// +// String schDateEnd = CommUtil.isNull(paramCountVO.getSchDateEnd(), ""); +// if("".equals(schDateEnd)){ +// schDateEnd = CommUtil.getDatePattern("yyyy-MM-dd"); +// } +// +// String dateFrom =""; +// String dateEnd = ""; +// +// if("DAY".equals(paramCountVO.getSchOption())){ +// dateFrom = CommUtil.getDateforStat(schDateFrom, "HOUR"); +// dateEnd = CommUtil.getDateforStat(schDateEnd, "HOUR"); +// }else if("MONTH".equals(paramCountVO.getSchOption())){ +// dateFrom = CommUtil.getDateforStat(schDateFrom, "DAY_M"); +// dateEnd = CommUtil.getDateforStat(schDateEnd, "DAY_M"); +// }else if("YEAR".equals(paramCountVO.getSchOption())){ +// dateFrom = CommUtil.getDateforStat(schDateFrom, "MONTH"); +// dateEnd = CommUtil.getDateforStat(schDateEnd, "MONTH"); +// }else { +// paramCountVO.setSchOption("DAY"); +// dateFrom = CommUtil.getDateforStat(schDateFrom, "HOUR"); +// dateEnd = CommUtil.getDateforStat(schDateEnd, "HOUR"); +// } +// +// paramCountVO.setSchDateFrom(dateFrom); +// paramCountVO.setSchDateEnd(dateEnd); +// +// String dateFromArr[] = dateFrom.split("-"); +// String dateEndArr[] = dateEnd.split("-"); +// +// +// if("DAY".equals(paramCountVO.getSchOption())){ +// paramCountVO.setCntOption("DAY"); +// paramCountVO.setStartDate(dateFromArr[0]+"-"+dateFromArr[1]+"-"+dateFromArr[2]); +// paramCountVO.setEndDate(dateEndArr[0]+"-"+dateEndArr[1]+"-"+dateEndArr[2]); +// }else if("MONTH".equals(paramCountVO.getSchOption())){ +// paramCountVO.setCntOption("MONTH"); +// paramCountVO.setStartDate(dateFromArr[0]+"-"+dateFromArr[1]); +// int lastDate = Integer.parseInt(dateEndArr[1])+1; +// String lastDateStr = ""; +// if(lastDate<10){ +// lastDateStr += "0"+lastDate; +// }else{ +// lastDateStr += lastDate; +// } +// paramCountVO.setEndDate(dateEndArr[0]+"-"+lastDateStr); +// }else if("YEAR".equals(paramCountVO.getSchOption())){ +// paramCountVO.setCntOption("YEAR"); +// paramCountVO.setStartDate(dateFromArr[0]); +// int lastDate = Integer.parseInt(dateEndArr[0])+1; +// String lastDateStr = ""+lastDate; +// paramCountVO.setEndDate(lastDateStr); +// } +// +// List resultList = mngrStatsService.mngrMenuCountList(paramCountVO); +// +// /************************ E: 출력목록 ************************/ +// +// +// /************************ S: 엑셀출력목록저장 ************************/ +// paramMap.put("dataList",resultList); +// +// //시작일~종료일 +// paramMap.put("startDate",dateFrom); +// paramMap.put("endDate",dateEnd); +// //paramMap.put("cntOptName",cntOptName); +// //paramMap.put("cntOptTitle",cntOptTitle); +// +// //엑셀 템플릿에 넘겨줄 데이타 +// mav.addObject("data", paramMap); +// +// //다운로드에 사용되어질 엑셀파일 템플릿 +// mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, CommUtil.getExcelTemplateName(request, "mngr")); +// //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) +// mav.addObject(ExcelDownloadView.DOWN_FILE_NM, "메뉴("+paramCountVO.getCntOption()+")별 접속통계_"+ CommUtil.getDatePattern("yyyy-MM-dd")); +// +// return mav; +// +// } +// +// /** +// * 관리자 - 기간별 접속자 현황 목록 엑셀다운로드(보고용) +// * @param +// * @param model +// * @return +// * @throws IOException, SQLException +// */ +// @RequestMapping(value="/excel/mngrStatsReportMenuExcelDown.do") +// public ModelAndView mngrStatsReportMenuExcelDown(MngrCountVO paramCountVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException { +// +// ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); +// +// Map paramMap = CommUtil.getParameterMap(request); +// +// /************************ S: 출력목록 ************************/ +// +// String schDateFrom = CommUtil.isNull(paramCountVO.getSchDateFrom(), ""); +// if("".equals(schDateFrom)){ +// schDateFrom = CommUtil.getDatePattern("yyyy-MM-dd"); +// } +// +// String schDateEnd = CommUtil.isNull(paramCountVO.getSchDateEnd(), ""); +// if("".equals(schDateEnd)){ +// schDateEnd = CommUtil.getDatePattern("yyyy-MM-dd"); +// } +// +// String dateFrom =""; +// String dateEnd = ""; +// +// if("DAY".equals(paramCountVO.getSchOption())){ +// dateFrom = CommUtil.getDateforStat(schDateFrom, "HOUR"); +// dateEnd = CommUtil.getDateforStat(schDateEnd, "HOUR"); +// }else if("MONTH".equals(paramCountVO.getSchOption())){ +// dateFrom = CommUtil.getDateforStat(schDateFrom, "DAY_M"); +// dateEnd = CommUtil.getDateforStat(schDateEnd, "DAY_M"); +// }else if("YEAR".equals(paramCountVO.getSchOption())){ +// dateFrom = CommUtil.getDateforStat(schDateFrom, "MONTH"); +// dateEnd = CommUtil.getDateforStat(schDateEnd, "MONTH"); +// }else { +// paramCountVO.setSchOption("DAY"); +// dateFrom = CommUtil.getDateforStat(schDateFrom, "HOUR"); +// dateEnd = CommUtil.getDateforStat(schDateEnd, "HOUR"); +// } +// +// paramCountVO.setSchDateFrom(dateFrom); +// paramCountVO.setSchDateEnd(dateEnd); +// +// String dateFromArr[] = dateFrom.split("-"); +// String dateEndArr[] = dateEnd.split("-"); +// +// +// if("DAY".equals(paramCountVO.getSchOption())){ +// paramCountVO.setCntOption("DAY"); +// paramCountVO.setStartDate(dateFromArr[0]+"-"+dateFromArr[1]+"-"+dateFromArr[2]); +// paramCountVO.setEndDate(dateEndArr[0]+"-"+dateEndArr[1]+"-"+dateEndArr[2]); +// }else if("MONTH".equals(paramCountVO.getSchOption())){ +// paramCountVO.setCntOption("MONTH"); +// paramCountVO.setStartDate(dateFromArr[0]+"-"+dateFromArr[1]); +// int lastDate = Integer.parseInt(dateEndArr[1])+1; +// String lastDateStr = ""; +// if(lastDate<10){ +// lastDateStr += "0"+lastDate; +// }else{ +// lastDateStr += lastDate; +// } +// paramCountVO.setEndDate(dateEndArr[0]+"-"+lastDateStr); +// }else if("YEAR".equals(paramCountVO.getSchOption())){ +// paramCountVO.setCntOption("YEAR"); +// paramCountVO.setStartDate(dateFromArr[0]); +// int lastDate = Integer.parseInt(dateEndArr[0])+1; +// String lastDateStr = ""+lastDate; +// paramCountVO.setEndDate(lastDateStr); +// } +// +// List resultList = new ArrayList(); +// +// String mname =""; +// +// if("lifecycle".equals(request.getParameter("gubun"))){ //생애주기별 통계 +// resultList = mngrStatsService.mngrReportLifeCycleMenuCountList(paramCountVO); +// mname ="생애주기별 통계"; +// } else if("no15".equals(request.getParameter("gubun"))){ //15위통계 +// resultList = mngrStatsService.mngrReportNo15MenuCountList(paramCountVO); +// mname ="15위 통계"; +// } else{ //기존꺼에 중복 제거와 전체임 +// resultList = mngrStatsService.mngrReportMenuCountList(paramCountVO); +// mname ="대메뉴 제외 통계"; +// } +// +// /************************ E: 출력목록 ************************/ +// +// +// /************************ S: 엑셀출력목록저장 ************************/ +// paramMap.put("dataList",resultList); +// +// //시작일~종료일 +// paramMap.put("startDate",dateFrom); +// paramMap.put("endDate",dateEnd); +// //paramMap.put("cntOptName",cntOptName); +// //paramMap.put("cntOptTitle",cntOptTitle); +// +// //엑셀 템플릿에 넘겨줄 데이타 +// mav.addObject("data", paramMap); +// +// //다운로드에 사용되어질 엑셀파일 템플릿 +// mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, CommUtil.getExcelTemplateName(request, "mngr")); +// //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) +// mav.addObject(ExcelDownloadView.DOWN_FILE_NM, "메뉴("+paramCountVO.getCntOption()+")별 접속통계(보고용)_"+mname+"_"+ CommUtil.getDatePattern("yyyy-MM-dd")); +// +// return mav; +// +// } +// +// /** +// * 게시판별 통계 엑셀다운로드 +// * @param siteCode +// * @param model +// * @return +// * @throws IOException, SQLException +// */ +// @RequestMapping(value="/excel/mngrStatsBoardExcelDown.do") +// public ModelAndView mngrStatsBoardExcelDown(@RequestParam(value="siteCode", required=false) String siteCode, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException { +// +// ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); +// +// Map paramMap = CommUtil.getParameterMap(request); +// //"DEVICE","OS","BROWSER","SEARCHENGINE" +// +// if ("".equals(siteCode) || siteCode == null) { +// siteCode = "web"; +// } +// +// /************************ 출력목록 ************************/ +// +// List resultList = mngrStatsService.mngrBoardStats(siteCode); +// +// /************************ E: 출력목록 ************************/ +// +// +// /************************ S: 엑셀출력목록저장 ************************/ +// +// paramMap.put("dataList",resultList); +// +// //엑셀 템플릿에 넘겨줄 데이타 +// mav.addObject("data", paramMap); +// +// //다운로드에 사용되어질 엑셀파일 템플릿 +// mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, CommUtil.getExcelTemplateName(request, "mngr")); +// //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) +// mav.addObject(ExcelDownloadView.DOWN_FILE_NM, "게시판 통계_"+ CommUtil.getDatePattern("yyyy-MM-dd")); +// +// return mav; +// +// } +// +// +// /** +// * 연령대별 통계 엑셀다운로드 +// * @param siteCode +// * @param model +// * @return +// * @throws IOException, SQLException +// */ +// @RequestMapping(value="/excel/mngrStatsAgeExcelDown.do") +// public ModelAndView mngrStatsAgeExcelDown(MngrCountVO paramCountVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException { +// +// ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); +// +// Map paramMap = CommUtil.getParameterMap(request); +// String optNm = ""; +// //"DEVICE","OS","BROWSER","SEARCHENGINE" +// +// if("".equals(paramCountVO.getSchOption())){ +// paramCountVO.setSchOption("DAY_M"); +// } +// +// String schDateFrom = CommUtil.isNull(paramCountVO.getSchDateFrom(), ""); +// if("".equals(schDateFrom)){ +// schDateFrom = CommUtil.getDatePattern("yyyy-MM-dd"); +// } +// +// String schDateEnd = CommUtil.isNull(paramCountVO.getSchDateEnd(), ""); +// if("".equals(schDateEnd)){ +// schDateEnd = CommUtil.getDatePattern("yyyy-MM-dd"); +// } +// /* +// String dateFrom = CommUtil.getDateforStat(schDateFrom, paramCountVO.getSchOption()); +// String dateEnd = CommUtil.getDateforStat(schDateEnd, paramCountVO.getSchOption()); +// */ +// +// paramCountVO.setSchDateFrom(schDateFrom); +// paramCountVO.setSchDateEnd(schDateEnd); +// +// String dateFromArr[] = paramCountVO.getSchDateFrom().split("-"); +// String dateEndArr[] = paramCountVO.getSchDateEnd().split("-"); +// +// if("DAY_M".equals(paramCountVO.getSchOption())){ +// paramCountVO.setCntOption("DAY"); +// paramCountVO.setStartDate(dateFromArr[0]+"-"+dateFromArr[1]+"-"+dateFromArr[2]); +// int lastDate = Integer.parseInt(dateEndArr[2])+1; +// String lastDateStr = ""; +// if(lastDate<10){ +// lastDateStr += "0"+lastDate; +// }else{ +// lastDateStr += lastDate; +// } +// paramCountVO.setEndDate(dateEndArr[0]+"-"+dateEndArr[1]+"-"+lastDateStr); +// } else if("MONTH".equals(paramCountVO.getSchOption())){ +// paramCountVO.setCntOption("MONTH"); +// paramCountVO.setStartDate(dateFromArr[0]+"-"+dateFromArr[1]); +// int lastDate = Integer.parseInt(dateEndArr[1])+1; +// String lastDateStr = ""; +// if(lastDate<10){ +// lastDateStr += "0"+lastDate; +// }else{ +// lastDateStr += lastDate; +// } +// paramCountVO.setEndDate(dateEndArr[0]+"-"+lastDateStr); +// }else if("YEAR".equals(paramCountVO.getSchOption())){ +// paramCountVO.setCntOption("YEAR"); +// paramCountVO.setStartDate(dateFromArr[0]); +// String lastDateStr =""+(Integer.parseInt(dateEndArr[0])+1); +// paramCountVO.setEndDate(lastDateStr); +// } +// +// +// /************************ 출력목록 ************************/ +// +// List resultList = mngrStatsService.mngrStatsAgeList(paramCountVO); +// +// /************************ E: 출력목록 ************************/ +// +// +// /************************ S: 엑셀출력목록저장 ************************/ +// +// paramMap.put("dataList",resultList); +// paramMap.put("startDate", paramCountVO.getSchDateFrom()); +// paramMap.put("endDate", paramCountVO.getSchDateEnd()); +// //엑셀 템플릿에 넘겨줄 데이타 +// mav.addObject("data", paramMap); +// +// //다운로드에 사용되어질 엑셀파일 템플릿 +// mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, CommUtil.getExcelTemplateName(request, "mngr")); +// //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) +// mav.addObject(ExcelDownloadView.DOWN_FILE_NM, "연령대별 통계_"+ CommUtil.getDatePattern("yyyy-MM-dd")); +// +// return mav; +// +// } +// +// +// /** +// * 연령대별 통계 엑셀다운로드 +// * @param siteCode +// * @param model +// * @return +// * @throws IOException, SQLException +// */ +// @RequestMapping(value="/bbsExcel/{siteCode}/{bbsBcId}.do") +// public ModelAndView mngrDownBBSExcel(@PathVariable("siteCode") String siteCode, @PathVariable("bbsBcId") String bbsBcId, HttpServletRequest request) throws IOException, SQLException { +// +// ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); +// +// Map paramMap = CommUtil.getParameterMap(request); +// +// /************************ 출력목록 ************************/ +// +// List resultList = boardService.selectBBSExcelData(bbsBcId); +// +// +// for(int i=0; i < resultList.size(); i++) { +// String bdContent = resultList.get(i).getBdContent(); +// String newBdContent = CommUtil.getAntiHtml(bdContent, ""); +// resultList.get(i).setBdContent(newBdContent); +// } +// +// MngrBoardconfigVO boardconfigVO = new MngrBoardconfigVO(); +// boardconfigVO.setId(bbsBcId); +// +// boardconfigVO = boardConfigService.mngrBoardconfigView(boardconfigVO); +// /************************ E: 출력목록 ************************/ +// +// +// /************************ S: 엑셀출력목록저장 ************************/ +// paramMap.put("dataList",resultList); +// paramMap.put("totalNum",resultList.size()); +// paramMap.put("bbsTitle", boardconfigVO.getBcName()); +// //엑셀 템플릿에 넘겨줄 데이타 +// mav.addObject("data", paramMap); +// +// String temp = CommUtil.getExcelTemplateName(request, "mngr"); +// +// //다운로드에 사용되어질 엑셀파일 템플릿 +// mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, "mngr.boardData"); +// //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) +// mav.addObject(ExcelDownloadView.DOWN_FILE_NM, boardconfigVO.getBcName()+"_"+ CommUtil.getDatePattern("yyyy-MM-dd")); +// +// return mav; +// } + + +} diff --git a/src/main/java/egovframework/itgcms/core/authority/service/MngrAuthoritySearchVO.java b/src/main/java/egovframework/itgcms/core/authority/service/MngrAuthoritySearchVO.java new file mode 100644 index 0000000..511a707 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/authority/service/MngrAuthoritySearchVO.java @@ -0,0 +1,49 @@ +package egovframework.itgcms.core.authority.service; + +import java.io.IOException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO;; + +public class MngrAuthoritySearchVO extends DefaultVO { + /** + * + */ + private static final long serialVersionUID = 5358593433818756365L; + private static final Logger logger = LogManager.getLogger(MngrAuthoritySearchVO.class); + + /** 관리자 아이디 */ + String id = ""; //검색조건 유지 + String menuCodes = ""; + + String query = ""; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + + public String getMenuCodes() { + return menuCodes; + } + + public void setMenuCodes(String menuCodes) { + this.menuCodes = menuCodes; + } + + public String getQuery() { + String query = super.queryString(); + try{ + query += "&id=" + java.net.URLEncoder.encode(this.id, "UTF-8"); + }catch(IOException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/authority/service/MngrAuthorityService.java b/src/main/java/egovframework/itgcms/core/authority/service/MngrAuthorityService.java new file mode 100644 index 0000000..135d1f2 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/authority/service/MngrAuthorityService.java @@ -0,0 +1,75 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.authority.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +/** + * @파일명 : MngrAuthorityService.java + * @파일정보 : 관리자관리 서비스 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface MngrAuthorityService { + + List selectMngrRoleList()throws IOException, SQLException; + + List selectMngrPowerList()throws IOException, SQLException; + + void insertMngrAuthorityRegistProc(MngrRoleVO mngrRoleVO, String menuCodes)throws IOException, SQLException; + + void insertMngrAuthorityPowerRegistProc(MngrPowerVO mngrPowerVO, String menuCodes)throws IOException, SQLException; + + List selectMngrAuthorityViewAjax(MngrAuthorityVO mngrAuthorityVO) throws IOException, SQLException; + + List selectMngrAuthorityPowerViewAjax(MngrAuthorityVO mngrAuthorityVO) throws IOException, SQLException; + + MngrRoleVO mSelectMngrRoleView(MngrAuthorityVO mngrAuthorityVO) throws IOException, SQLException; + + MngrPowerVO selectMngrPowerView(MngrAuthorityVO mngrAuthorityVO) throws IOException, SQLException; + + void updateMngrAuthorityUpdateProc(MngrRoleVO mngrRoleVO, String menuCodes)throws IOException, SQLException; + + void updateMngrAuthorityPowerUpdateProc(MngrPowerVO mngrPowerVO, String menuCodes)throws IOException, SQLException; + + void deleteMngrAuthorityDeleteProc(MngrRoleVO mngrRoleVO,MngrAuthorityVO mngrAuthorityVO)throws IOException, SQLException; + + void deleteMngrAuthorityPowerDeleteProc(MngrPowerVO mngrPowerVO,MngrAuthorityVO mngrAuthorityVO)throws IOException, SQLException; + + void updateMngrAuthorityUpdateManagerAuth(MngrAuthorityVO mngrAuthorityVO)throws IOException, SQLException; + + void updateMngrAuthorityPowerUpdateManagerAuth(MngrPowerVO mngrPowerVO)throws IOException, SQLException; + + int mngrPowerCodeCheck(MngrPowerVO mngrPowerVO) throws IOException, SQLException; + + void insertMngrLevelRegistProc(MngrPowerVO mngrPowerVO)throws IOException, SQLException; + + void updateMngrLevelRegistProc(MngrPowerVO mngrPowerVO, HttpServletRequest request) throws IOException, SQLException; + + void deleteMngrLevelRegistProc(MngrPowerVO mngrPowerVO)throws IOException, SQLException; + + MngrPowerVO selectMngrPowerView(MngrPowerVO mngrPowerVO) throws IOException, SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/authority/service/MngrAuthorityVO.java b/src/main/java/egovframework/itgcms/core/authority/service/MngrAuthorityVO.java new file mode 100644 index 0000000..f4cb005 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/authority/service/MngrAuthorityVO.java @@ -0,0 +1,103 @@ +package egovframework.itgcms.core.authority.service; + + +public class MngrAuthorityVO extends MngrAuthoritySearchVO{ + + private static final long serialVersionUID = 1517554024024657795L; + + String roleIdx = ""; + String powerIdx = ""; + String authType = ""; + String menuCode = ""; + String mngId = ""; + String regdt = ""; + String upddt = ""; + String deldt = ""; + String regmemid = ""; + String updmemid = ""; + String delmemid = ""; + String delyn = ""; + + String authIdx = ""; + + public String getRoleIdx() { + return roleIdx; + } + public void setRoleIdx(String roleIdx) { + this.roleIdx = roleIdx; + } + public String getPowerIdx() { + return powerIdx; + } + public void setPowerIdx(String powerIdx) { + this.powerIdx = powerIdx; + } + public String getAuthType() { + return authType; + } + public void setAuthType(String authType) { + this.authType = authType; + } + public String getMenuCode() { + return menuCode; + } + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + public String getMngId() { + return mngId; + } + public void setMngId(String mngId) { + this.mngId = mngId; + } + public String getRegdt() { + return regdt; + } + public void setRegdt(String regdt) { + this.regdt = regdt; + } + public String getUpddt() { + return upddt; + } + public void setUpddt(String upddt) { + this.upddt = upddt; + } + public String getDeldt() { + return deldt; + } + public void setDeldt(String deldt) { + this.deldt = deldt; + } + public String getRegmemid() { + return regmemid; + } + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + public String getUpdmemid() { + return updmemid; + } + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + public String getDelmemid() { + return delmemid; + } + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + public String getDelyn() { + return delyn; + } + public void setDelyn(String delyn) { + this.delyn = delyn; + } + public String getAuthIdx() { + return authIdx; + } + public void setAuthIdx(String authIdx) { + this.authIdx = authIdx; + } + + +} diff --git a/src/main/java/egovframework/itgcms/core/authority/service/MngrPowerVO.java b/src/main/java/egovframework/itgcms/core/authority/service/MngrPowerVO.java new file mode 100644 index 0000000..43ee78c --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/authority/service/MngrPowerVO.java @@ -0,0 +1,87 @@ +package egovframework.itgcms.core.authority.service; + +import java.util.HashMap; + + +public class MngrPowerVO extends MngrAuthoritySearchVO{ + private static final long serialVersionUID = 3520051843842653012L; + + String powerIdx = ""; + String powerName = ""; + String powerCode = ""; + String regdt = ""; + String upddt = ""; + String deldt = ""; + String regmemid = ""; + String updmemid = ""; + String delmemid = ""; + String delyn = ""; + String managerCount = ""; + + public String getPowerIdx() { + return powerIdx; + } + public void setPowerIdx(String powerIdx) { + this.powerIdx = powerIdx; + } + public String getPowerName() { + return powerName; + } + public void setPowerName(String powerName) { + this.powerName = powerName; + } + public String getPowerCode() { + return powerCode; + } + public void setPowerCode(String powerCode) { + this.powerCode = powerCode; + } + public String getRegdt() { + return regdt; + } + public void setRegdt(String regdt) { + this.regdt = regdt; + } + public String getUpddt() { + return upddt; + } + public void setUpddt(String upddt) { + this.upddt = upddt; + } + public String getDeldt() { + return deldt; + } + public void setDeldt(String deldt) { + this.deldt = deldt; + } + public String getRegmemid() { + return regmemid; + } + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + public String getUpdmemid() { + return updmemid; + } + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + public String getDelmemid() { + return delmemid; + } + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + public String getDelyn() { + return delyn; + } + public void setDelyn(String delyn) { + this.delyn = delyn; + } + public String getManagerCount() { + return managerCount; + } + public void setManagerCount(String managerCount) { + this.managerCount = managerCount; + } +} diff --git a/src/main/java/egovframework/itgcms/core/authority/service/MngrRoleSearchVO.java b/src/main/java/egovframework/itgcms/core/authority/service/MngrRoleSearchVO.java new file mode 100644 index 0000000..7f03309 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/authority/service/MngrRoleSearchVO.java @@ -0,0 +1,41 @@ +package egovframework.itgcms.core.authority.service; + +import java.io.IOException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO;; + +public class MngrRoleSearchVO extends DefaultVO { + /** + * + */ + private static final long serialVersionUID = 5358593433818756365L; + + private static final Logger logger = LogManager.getLogger(MngrRoleSearchVO.class); + + /** 관리자 아이디 */ + String id = ""; //검색조건 유지 + + String query = ""; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + + public String getQuery() { + String query = super.queryString(); + try{ + query += "&id=" + java.net.URLEncoder.encode(this.id, "UTF-8"); + }catch(IOException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/authority/service/MngrRoleVO.java b/src/main/java/egovframework/itgcms/core/authority/service/MngrRoleVO.java new file mode 100644 index 0000000..6e13427 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/authority/service/MngrRoleVO.java @@ -0,0 +1,80 @@ +package egovframework.itgcms.core.authority.service; + + +public class MngrRoleVO extends MngrAuthoritySearchVO{ + private static final long serialVersionUID = 3520051843842653012L; + + String roleIdx = ""; + String roleName = ""; + String regdt = ""; + String upddt = ""; + String deldt = ""; + String regmemid = ""; + String updmemid = ""; + String delmemid = ""; + String delyn = ""; + String managerCount = ""; + + public String getRoleIdx() { + return roleIdx; + } + public void setRoleIdx(String roleIdx) { + this.roleIdx = roleIdx; + } + public String getRoleName() { + return roleName; + } + public void setRoleName(String roleName) { + this.roleName = roleName; + } + public String getRegdt() { + return regdt; + } + public void setRegdt(String regdt) { + this.regdt = regdt; + } + public String getUpddt() { + return upddt; + } + public void setUpddt(String upddt) { + this.upddt = upddt; + } + public String getDeldt() { + return deldt; + } + public void setDeldt(String deldt) { + this.deldt = deldt; + } + public String getRegmemid() { + return regmemid; + } + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + public String getUpdmemid() { + return updmemid; + } + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + public String getDelmemid() { + return delmemid; + } + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + public String getDelyn() { + return delyn; + } + public void setDelyn(String delyn) { + this.delyn = delyn; + } + public String getManagerCount() { + return managerCount; + } + public void setManagerCount(String managerCount) { + this.managerCount = managerCount; + } + + +} diff --git a/src/main/java/egovframework/itgcms/core/authority/service/impl/MngrAuthorityMapper.java b/src/main/java/egovframework/itgcms/core/authority/service/impl/MngrAuthorityMapper.java new file mode 100644 index 0000000..13b4d7a --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/authority/service/impl/MngrAuthorityMapper.java @@ -0,0 +1,136 @@ +/* + * Copyright 2011 MOPAS(Ministry of Public Mngristration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.authority.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.itgcms.core.authority.service.MngrAuthorityVO; +import egovframework.itgcms.core.authority.service.MngrPowerVO; +import egovframework.itgcms.core.authority.service.MngrRoleVO; +import egovframework.itgcms.core.site.service.MngrSiteVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +/** + * authority에 관한 데이터처리 매퍼 클래스 + * + * @author 표준프레임워크센터 + * @since 2014.01.24 + * @version 1.0 + * @see
    + *  == 개정이력(Modification Information) ==
    + *
    + *          수정일          수정자           수정내용
    + *  ----------------    ------------    ---------------------------
    + *   2014.01.24        표준프레임워크센터          최초 생성
    + *
    + * 
    + */ +@Mapper("mngrAuthorityMapper") +public interface MngrAuthorityMapper { + + /* + + *//** + * 글 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + *//* + List mngrAuthorityList(MngrAuthoritySearchVO searchVO) throws SQLException; + + *//** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + *//* + int mngrAuthorityListTotCnt(MngrAuthoritySearchVO searchVO) throws SQLException; + + void mngrAuthorityRegistProc(MngrAuthorityVO authorityVO) throws SQLException; + + MngrAuthorityVO mngrAuthorityView(MngrAuthoritySearchVO searchVO) throws SQLException; + + void mngrAuthorityUpdateProc(MngrAuthorityVO authorityVO) throws SQLException; + + void mngrAuthorityDelProc(MngrAuthorityVO authorityVO)throws SQLException; + + void mngrAuthorityChkDelProc(MngrAuthorityVO authorityVO)throws SQLException; + + int mngrAuthorityCheckId(MngrAuthoritySearchVO mngrAuthoritySearchVO)throws SQLException; + + void mngrAuthorityInitPass(MngrAuthorityVO authorityVO)throws SQLException; + + void increaseMngPassTryCnt(MngrAuthorityVO authorityVO)throws SQLException; + + List mngrAuthorityListAjax(MngrAuthoritySearchVO mngrAuthoritySearchVO)throws SQLException;*/ + + List mngrRoleList()throws SQLException; + + List mngrPowerList()throws SQLException; + + String mngrRoleMaxIdx()throws SQLException; + + String mngrPowerMaxIdx()throws SQLException; + + void mngrRoleRegist(MngrRoleVO mngrRoleVO)throws SQLException; + + void mngrPowerRegist(MngrPowerVO mngrPowerVO)throws SQLException; + + void mngrAuthorityRegist(MngrAuthorityVO mngrAuthorityVO)throws SQLException; + + void mngrAuthorityPowerRegist(MngrAuthorityVO mngrAuthorityVO)throws SQLException; + + List mngrAuthorityViewAjax(MngrAuthorityVO mngrAuthorityVO)throws SQLException; + + List mngrAuthorityPowerViewAjax(MngrAuthorityVO mngrAuthorityVO)throws SQLException; + + MngrRoleVO mngrRoleView(MngrAuthorityVO mngrAuthorityVO)throws SQLException; + + MngrPowerVO mngrPowerView(MngrAuthorityVO mngrAuthorityVO)throws SQLException; + + void mngrRoleUpdate(MngrRoleVO mngrRoleVO)throws SQLException; + + void mngrPowerUpdate(MngrPowerVO mngrPowerVO)throws SQLException; + + void mngrAuthorityDelete(MngrAuthorityVO mngrAuthorityVO)throws SQLException; + + void mngrAuthorityPowerDelete(MngrAuthorityVO mngrAuthorityVO)throws SQLException; + + void mngrAuthorityChkDelete(MngrAuthorityVO mngrAuthorityVO)throws SQLException; + + void mngrRoleDelete(MngrRoleVO mngrRoleVO)throws SQLException; + + void mngrPowerDelete(MngrPowerVO mngrPowerVO)throws SQLException; + + void mngrAuthorityUpdateManagerAuth(MngrAuthorityVO mngrAuthorityVO)throws SQLException; + + void mngrAuthorityPowerUpdateManagerAuth(MngrPowerVO mngrPowerVO)throws SQLException; + + void mngrAuthorityDelAllSiteMenu(MngrSiteVO mngrSiteVO); + + void mngrAuthorityDelAllManager(MngrSiteVO mngrSiteVO); + + int mngrPowerCodeCheck(MngrPowerVO mngrPowerVO) throws SQLException ; + + void MngrLevelRegistProc(MngrPowerVO mngrPowerVO)throws SQLException; + + void MngrLevelUpdateProc(MngrPowerVO mngrPowerVO)throws SQLException; + + void MngrLevelDeleteProc(MngrPowerVO mngrPowerVO)throws SQLException; + + MngrPowerVO mngrPowerView(MngrPowerVO mngrPowerVO) throws SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/authority/service/impl/MngrAuthorityServiceImpl.java b/src/main/java/egovframework/itgcms/core/authority/service/impl/MngrAuthorityServiceImpl.java new file mode 100644 index 0000000..4071199 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/authority/service/impl/MngrAuthorityServiceImpl.java @@ -0,0 +1,208 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.authority.service.impl; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import egovframework.itgcms.core.authority.service.MngrAuthorityService; +import egovframework.itgcms.core.authority.service.MngrAuthorityVO; +import egovframework.itgcms.core.authority.service.MngrPowerVO; +import egovframework.itgcms.core.authority.service.MngrRoleVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * @파일명 : AuthorityServiceImpl.java + * @파일정보 : 게시판관리 서비스 구현 클래스 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Service("mngrAuthorityService") +public class MngrAuthorityServiceImpl extends EgovAbstractServiceImpl implements MngrAuthorityService { + + private static final Logger LOGGER = LoggerFactory.getLogger(MngrAuthorityServiceImpl.class); + + /** AuthorityDAO */ + // ibatis 사용 + /*@Resource(name="AuthorityDAO") + private AuthorityDAO authorityDAO;*/ + // mybatis 사용 + @Resource(name="mngrAuthorityMapper") + private MngrAuthorityMapper mngrAuthorityMapper; + /** MngrAuthorityService */ + @Resource(name = "mngrAuthorityService") + private MngrAuthorityService mngrAuthorityService; + + @Override + public List selectMngrRoleList() throws IOException, SQLException { + return mngrAuthorityMapper.mngrRoleList(); + } + @Override + public List selectMngrPowerList() throws IOException, SQLException { + return mngrAuthorityMapper.mngrPowerList(); + } + @Override + public void insertMngrAuthorityRegistProc(MngrRoleVO mngrRoleVO, String menuCodes) throws IOException, SQLException { + String roleIdx = mngrAuthorityMapper.mngrRoleMaxIdx(); //인덱스 조회 + mngrRoleVO.setRoleIdx(roleIdx);//인덱스 설정 + mngrAuthorityMapper.mngrRoleRegist(mngrRoleVO);//insert role + String[] arrCodes = menuCodes.split(","); + + MngrAuthorityVO mngrAuthorityVO = new MngrAuthorityVO(); + mngrAuthorityVO.setRoleIdx(roleIdx); + mngrAuthorityVO.setAuthType("1"); // 롤권한이 있음 + + mngrAuthorityVO.setRegmemid(CommUtil.getMngrMemId()); + for(int i = 0; i < arrCodes.length; i++){ + mngrAuthorityVO.setMenuCode(arrCodes[i]); + mngrAuthorityMapper.mngrAuthorityRegist(mngrAuthorityVO); + } + } + @Override + public void insertMngrAuthorityPowerRegistProc(MngrPowerVO mngrPowerVO, String menuCodes) throws IOException, SQLException { + //String powerIdx = mngrAuthorityMapper.mngrPowerMaxIdx(); //인덱스 조회 + //mngrPowerVO.setPowerIdx(powerIdx);//인덱스 설정 + mngrAuthorityMapper.mngrPowerRegist(mngrPowerVO);//insert role + String[] arrCodes = menuCodes.split(","); + + MngrAuthorityVO mngrAuthorityVO = new MngrAuthorityVO(); + mngrAuthorityVO.setPowerIdx(mngrPowerVO.getPowerIdx()); + mngrAuthorityVO.setAuthType("1"); // 롤권한이 있음 + mngrAuthorityVO.setRegmemid(CommUtil.getMngrMemId()); + + for(int i = 0; i < arrCodes.length; i++){ + mngrAuthorityVO.setMenuCode(arrCodes[i]); + mngrAuthorityMapper.mngrAuthorityPowerRegist(mngrAuthorityVO); + } + } + @Override + public List selectMngrAuthorityViewAjax(MngrAuthorityVO mngrAuthorityVO) throws IOException, SQLException { + return mngrAuthorityMapper.mngrAuthorityViewAjax(mngrAuthorityVO); + } + @Override + public List selectMngrAuthorityPowerViewAjax(MngrAuthorityVO mngrAuthorityVO) throws IOException, SQLException { + return mngrAuthorityMapper.mngrAuthorityPowerViewAjax(mngrAuthorityVO); + } + @Override + public MngrRoleVO mSelectMngrRoleView(MngrAuthorityVO mngrAuthorityVO)throws IOException, SQLException { + return mngrAuthorityMapper.mngrRoleView(mngrAuthorityVO); + } + @Override + public MngrPowerVO selectMngrPowerView(MngrAuthorityVO mngrAuthorityVO)throws IOException, SQLException { + return mngrAuthorityMapper.mngrPowerView(mngrAuthorityVO); + } + @Override + public void updateMngrAuthorityUpdateProc(MngrRoleVO mngrRoleVO, String menuCodes) throws IOException, SQLException { + mngrAuthorityMapper.mngrRoleUpdate(mngrRoleVO);//update role + + String[] arrCodes = menuCodes.split(","); + + MngrAuthorityVO mngrAuthorityVO = new MngrAuthorityVO(); + mngrAuthorityVO.setRoleIdx(mngrRoleVO.getRoleIdx()); + mngrAuthorityVO.setAuthType("1"); // 롤권한이 있음 + + mngrAuthorityMapper.mngrAuthorityDelete(mngrAuthorityVO); //기존 메뉴 권한 삭제 + + //삭제후 등록 + mngrAuthorityVO.setRegmemid(CommUtil.getMngrMemId()); + for(int i = 0; i < arrCodes.length; i++){ + mngrAuthorityVO.setMenuCode(arrCodes[i]); + mngrAuthorityMapper.mngrAuthorityRegist(mngrAuthorityVO); + } + } + @Override + public void updateMngrAuthorityPowerUpdateProc(MngrPowerVO mngrPowerVO, String menuCodes) throws IOException, SQLException { + mngrAuthorityMapper.mngrPowerUpdate(mngrPowerVO);//update role + + String[] arrCodes = menuCodes.split(","); + + MngrAuthorityVO mngrAuthorityVO = new MngrAuthorityVO(); + mngrAuthorityVO.setPowerIdx(mngrPowerVO.getPowerIdx()); + mngrAuthorityVO.setAuthType("1"); // 롤권한이 있음 + + mngrAuthorityMapper.mngrAuthorityPowerDelete(mngrAuthorityVO); //기존 메뉴 권한 삭제 + + //삭제후 등록 + mngrAuthorityVO.setRegmemid(CommUtil.getMngrMemId()); + for(int i = 0; i < arrCodes.length; i++){ + mngrAuthorityVO.setMenuCode(arrCodes[i]); + mngrAuthorityMapper.mngrAuthorityPowerRegist(mngrAuthorityVO); + } + } + @Override + public void deleteMngrAuthorityDeleteProc(MngrRoleVO mngrRoleVO,MngrAuthorityVO mngrAuthorityVO) throws IOException, SQLException { + mngrAuthorityVO.setAuthType("1"); // 롤권한이 있음 + mngrAuthorityMapper.mngrAuthorityDelete(mngrAuthorityVO); + mngrAuthorityMapper.mngrRoleDelete(mngrRoleVO); + } + @Override + public void deleteMngrAuthorityPowerDeleteProc(MngrPowerVO mngrPowerVO,MngrAuthorityVO mngrAuthorityVO) throws IOException, SQLException { + mngrAuthorityVO.setAuthType("1"); // 롤권한이 있음 + mngrAuthorityMapper.mngrAuthorityPowerDelete(mngrAuthorityVO); + mngrAuthorityMapper.mngrPowerDelete(mngrPowerVO); + } + @Override + public void updateMngrAuthorityUpdateManagerAuth(MngrAuthorityVO mngrAuthorityVO) throws IOException, SQLException { + mngrAuthorityMapper.mngrAuthorityUpdateManagerAuth(mngrAuthorityVO); + } + @Override + public void updateMngrAuthorityPowerUpdateManagerAuth(MngrPowerVO mngrPowerVO) throws IOException, SQLException { + mngrAuthorityMapper.mngrAuthorityPowerUpdateManagerAuth(mngrPowerVO); + } + @Override + public int mngrPowerCodeCheck(MngrPowerVO mngrPowerVO) throws IOException, SQLException { + return mngrAuthorityMapper.mngrPowerCodeCheck(mngrPowerVO); + } + @Override + public void insertMngrLevelRegistProc(MngrPowerVO mngrPowerVO) throws IOException, SQLException { + mngrAuthorityMapper.MngrLevelRegistProc(mngrPowerVO);//insert + } + @Override + public void updateMngrLevelRegistProc(MngrPowerVO mngrPowerVO, HttpServletRequest request) throws IOException, SQLException { + /*List tmpList = (List) mngrAuthorityService.selectMngrPowerList(); + for (int i = 1; i < tmpList.size(); i++) { //itgood을 빼고 update하기위해 1부터. + String matchName = tmpList.get(i).getName(); + String[] powers = request.getParameterValues(matchName+"power"); + mngrPowerVO.setPower(Arrays.toString(powers).replace("[","").replace("]","")); + mngrPowerVO.setName(matchName); + mngrAuthorityMapper.MngrLevelUpdateProc(mngrPowerVO); + }*/ + } + @Override + public void deleteMngrLevelRegistProc(MngrPowerVO mngrPowerVO) throws IOException, SQLException { + mngrAuthorityMapper.MngrLevelDeleteProc(mngrPowerVO);//insert + } + @Override + public MngrPowerVO selectMngrPowerView(MngrPowerVO mngrPowerVO)throws IOException, SQLException { + return mngrAuthorityMapper.mngrPowerView(mngrPowerVO); + } +} diff --git a/src/main/java/egovframework/itgcms/core/board/service/BoardAuthVO.java b/src/main/java/egovframework/itgcms/core/board/service/BoardAuthVO.java new file mode 100644 index 0000000..6cdbf66 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/board/service/BoardAuthVO.java @@ -0,0 +1,51 @@ +package egovframework.itgcms.core.board.service; + + +public class BoardAuthVO { + + private boolean list = false; + private boolean view = false; + private boolean regist = false; + private boolean reply = false; + private boolean update = false; + private boolean delete = false; + + public boolean isList() { + return list; + } + public void setList(boolean list) { + this.list = list; + } + public boolean isView() { + return view; + } + public void setView(boolean view) { + this.view = view; + } + public boolean isRegist() { + return regist; + } + public void setRegist(boolean regist) { + this.regist = regist; + } + public boolean isUpdate() { + return update; + } + public void setUpdate(boolean update) { + this.update = update; + } + public boolean isDelete() { + return delete; + } + public void setDelete(boolean delete) { + this.delete = delete; + } + public boolean isReply() { + return reply; + } + public void setReply(boolean reply) { + this.reply = reply; + } + + +} diff --git a/src/main/java/egovframework/itgcms/core/board/service/BoardReactionSearchVO.java b/src/main/java/egovframework/itgcms/core/board/service/BoardReactionSearchVO.java new file mode 100644 index 0000000..e046e13 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/board/service/BoardReactionSearchVO.java @@ -0,0 +1,83 @@ +package egovframework.itgcms.core.board.service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class BoardReactionSearchVO extends BoardVO { + + + private Date regDt; + private Date recentDt; + private String recentName; + private String menuCode; + private String siteName; + private String boardName; + private int cnt = 0; + private List reationList = null; + + + + public int getCnt() { + return cnt; + } + public void setCnt(int cnt) { + this.cnt = cnt; + } + public List getReationList() { + if (reationList != null) { + ArrayList arrRet = new ArrayList(); + arrRet.addAll(reationList); + return arrRet; + }else{ + return null; + } + } + public void setReationList(List reationList) { + if (reationList != null) { + this.reationList = new ArrayList<>(reationList); + } + } + public Date getRegDt() { + return regDt; + } + public void setRegDt(Date regDt) { + this.regDt = regDt; + } + public Date getRecentDt() { + return recentDt; + } + public void setRecentDt(Date recentDt) { + this.recentDt = recentDt; + } + public String getMenuCode() { + return menuCode; + } + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + public String getSiteName() { + return siteName; + } + public void setSiteName(String siteName) { + this.siteName = siteName; + } + public void setRecentName(String recentName) { + this.recentName = recentName; + } + public String getRecentName() { + return recentName; + } + public void setBoardName(String boardName) { + this.boardName = boardName; + } + public String getBoardName() { + return boardName; + } + + @Override + public int getPageUnit(){ + return 10; + + } +} diff --git a/src/main/java/egovframework/itgcms/core/board/service/BoardSearchVO.java b/src/main/java/egovframework/itgcms/core/board/service/BoardSearchVO.java new file mode 100644 index 0000000..fce5f9b --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/board/service/BoardSearchVO.java @@ -0,0 +1,170 @@ +package egovframework.itgcms.core.board.service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigVO; +import egovframework.itgcms.core.site.service.MngrSiteVO; + +public class BoardSearchVO extends DefaultVO { + /** + * + */ + private static final long serialVersionUID = 5358593433818756365L; + + private static final Logger logger = LogManager.getLogger(BoardSearchVO.class); + + /** 관리자 아이디 */ + String id = ""; //검색조건 유지 + String uid = ""; //url아이디 + String schBcid = ""; //게시판아이디 + String root = ""; // 게시판 사용영역 + + String schBdcode = ""; //카테고리 검색 + + String query = ""; + + MngrBoardconfigVO mngrBoardconfigVO = new MngrBoardconfigVO(); + + String schRegmemid = ""; //게시글 작성자 아이디 + String schGroupCode = ""; //게시글 작성자 부서코드 + String schMngType = ""; //관리자 권한 + String schSecritPw = ""; //게시글 비번 + + List schSiteList = new ArrayList(); //검색할 사이트 (단일 or 전체) + + String schSite = ""; + String siteCode = ""; + + public BoardSearchVO(){ + super.setViewCount("0");// 생성시 빈값 + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } + + public String getSchBcid() { + return schBcid; + } + + public void setSchBcid(String schBcid) { + this.schBcid = schBcid; + } + + public String getRoot() { + return root; + } + + public void setRoot(String root) { + this.root = root; + } + + public String getSchBdcode() { + return schBdcode; + } + + public void setSchBdcode(String schBdcode) { + this.schBdcode = schBdcode; + } + + public MngrBoardconfigVO getMngrBoardconfigVO() { + return mngrBoardconfigVO; + } + + public void setMngrBoardconfigVO(MngrBoardconfigVO mngrBoardconfigVO) { + this.mngrBoardconfigVO = mngrBoardconfigVO; + } + + public String getSchRegmemid() { + return schRegmemid; + } + + public void setSchRegmemid(String schRegmemid) { + this.schRegmemid = schRegmemid; + } + + public String getSchGroupCode() { + return schGroupCode; + } + + public void setSchGroupCode(String schGroupCode) { + this.schGroupCode = schGroupCode; + } + + + public String getSchMngType() { + return schMngType; + } + + public void setSchMngType(String schMngType) { + this.schMngType = schMngType; + } + + public String getSchSecritPw() { + return schSecritPw; + } + + public void setSchSecritPw(String schSecritPw) { + this.schSecritPw = schSecritPw; + } + + public List getSchSiteList() { + if (schSiteList != null) { + ArrayList arrRet = new ArrayList(); + arrRet.addAll(schSiteList); + return arrRet; + }else{ + return null; + } + } + + public void setSchSiteList(List schSiteList) { + if (schSiteList != null) { + this.schSiteList = new ArrayList(schSiteList); + } + } + + public String getSchSite() { + return schSite; + } + + public void setSchSite(String schSite) { + this.schSite = schSite; + } + + public String getQuery() { + String query = super.queryString(); + try{ + query += "&id=" + java.net.URLEncoder.encode(this.id, "UTF-8"); + query += "&schBdcode=" + java.net.URLEncoder.encode(this.schBdcode, "UTF-8"); + query += "&schGroupCode=" + java.net.URLEncoder.encode(this.schGroupCode, "UTF-8"); + }catch(IOException e){ + logger.error("예외 상황 발생"); + } + return query; + } + public void setSiteCode(String siteCode) { + this.siteCode = siteCode; + } + public String getSiteCode() { + return siteCode; + } +} diff --git a/src/main/java/egovframework/itgcms/core/board/service/BoardService.java b/src/main/java/egovframework/itgcms/core/board/service/BoardService.java new file mode 100644 index 0000000..4e12b7d --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/board/service/BoardService.java @@ -0,0 +1,122 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.board.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.ui.ModelMap; + +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigVO; + +/** + * @파일명 : BoardService.java + * @파일정보 : 관리자관리 서비스 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface BoardService { + + String selectBoardList(ModelMap model, MngrBoardconfigVO mngrBoardconfigVO, + BoardSearchVO boardSearchVO, BoardVO boardVO, + HttpServletRequest request, HttpServletResponse response, + String returnPage) throws IOException, SQLException; + + String selectBoardRegist(ModelMap model, MngrBoardconfigVO mngrBoardconfigVO, + BoardSearchVO boardSearchVO, BoardVO boardVO, + HttpServletRequest request, HttpServletResponse response, + String returnPage) throws IOException, SQLException; + + String selectBoardView(ModelMap model, MngrBoardconfigVO mngrBoardconfigVO, + BoardSearchVO boardSearchVO, BoardVO boardVO, + HttpServletRequest request, HttpServletResponse response, + String returnPage) throws IOException, SQLException; + + String insertBoardRegistProc(ModelMap model, MngrBoardconfigVO mngrBoardconfigVO, + BoardSearchVO boardSearchVO, BoardVO boardVO, + HttpServletRequest request, HttpServletResponse response, + String returnPage) throws IOException, SQLException; + + String updateBoardUpdateProc(ModelMap model, MngrBoardconfigVO mngrBoardconfigVO, + BoardSearchVO boardSearchVO, BoardVO boardVO, + HttpServletRequest request, HttpServletResponse response, + String returnPage) throws IOException, SQLException; + + String updateBoardDeleteProc(ModelMap model, MngrBoardconfigVO mngrBoardconfigVO, + BoardSearchVO boardSearchVO, BoardVO boardVO, + HttpServletRequest request, HttpServletResponse response, + String returnPage) throws IOException, SQLException; + + String updateBoardChkDelProc(ModelMap model, MngrBoardconfigVO mngrBoardconfigVO, + BoardSearchVO boardSearchVO, BoardVO boardVO, + HttpServletRequest request, HttpServletResponse response, + String returnPage) throws IOException, SQLException; + + String selectBoardReply(ModelMap model, MngrBoardconfigVO mngrBoardconfigVO, + BoardSearchVO boardSearchVO, BoardVO boardVO, + HttpServletRequest request, HttpServletResponse response, + String returnPage) throws IOException, SQLException; + + String insertBoardReplyProc(ModelMap model, MngrBoardconfigVO mngrBoardconfigVO, + BoardSearchVO boardSearchVO, BoardVO boardVO, + HttpServletRequest request, HttpServletResponse response, + String returnPage) throws IOException, SQLException; + + BoardVO selectBoardRegInfo(BoardSearchVO boardSearchVO) throws IOException, SQLException; + + List selectBoardMainList(BoardSearchVO boardSearchVO)throws IOException, SQLException; + + void updateIncreaseReadnum(BoardSearchVO boardSearchVO)throws IOException, SQLException; + + String searchAll(ModelMap model, MngrBoardconfigVO mngrBoardconfigVO, + BoardSearchVO boardSearchVO, BoardVO boardVO, + HttpServletRequest request, HttpServletResponse response, + String returnPage) throws IOException, SQLException; + + List getBoardList(String root, String menuCode, int limitNum) throws IOException, SQLException; + List getBoardList(String root, String menuCode) throws IOException, SQLException; + + List selectBBSExcelData(String menuCode) throws IOException, SQLException; + + Map redirectNoticePage(String boardCode, String siteCode) throws IOException, SQLException; + + boolean boardPassCheck(String bdIndx, String passwd) throws IOException, SQLException; + + MngrBoardconfigVO getBoardconfigViewByMenuCode(String menuCode) throws IOException, SQLException; + + MainBoardVO latestBbsMenuSchBcid(String menuCode, String root) throws IOException, SQLException; + + int getReplyTotCnt(BoardReactionSearchVO searchVO) throws IOException, SQLException; + + List selectReplyList(BoardReactionSearchVO searchVO) throws IOException, SQLException; + + int getCommentTotCnt(BoardReactionSearchVO searchVO) throws IOException, SQLException; + + List selectCommentList(BoardReactionSearchVO searchVO) throws IOException, SQLException; + + void postingSocialMedia(BoardVO boardVO, BoardSearchVO boardSearchVO, HttpServletRequest request) throws IOException, SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/board/service/BoardVO.java b/src/main/java/egovframework/itgcms/core/board/service/BoardVO.java new file mode 100644 index 0000000..2c404c0 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/board/service/BoardVO.java @@ -0,0 +1,426 @@ +package egovframework.itgcms.core.board.service; + + +public class BoardVO extends BoardSearchVO{ + private static final long serialVersionUID = 7992967475788187625L; + String bdIdx = ""; + String bcId = ""; + String bdCode = ""; + String bdWriter = ""; + String bdTitle = ""; + String bdContent = ""; + String bdReadnum = ""; + String bdNotice = "0"; //공지여부 0 : 미사용 1: 전체 사이트 2: 내 사이트 3 : 해당 게시판 + String bdNoticeTermyn = "N"; //게시기간 사용여부 + String bdNoticeSdt = ""; // 공지기간 시작일 + String bdNoticeEdt = ""; // 공지기간 종료일 + String noticeOrder = "0"; //공지기간사용여부 체크, 공지기간 체크 후에 공지로 올려야 하면 1, 공지체크됐지만, 기간이 안되면 0이고, 공지체크안되면 0. + + String bdUseyn = "Y"; //게시여부 + String bdUseTermyn = "N"; //게시기간 사용여부 + String bdUseSdt = ""; //게시기간 시작일 + String bdUseEdt = ""; //게시기간 종료일 + + String bdPushyn = "N"; //푸쉬 발송 여부 + + String bdIp = ""; + String bdReidx = ""; + String bdRelevel = ""; + String bdReorder = ""; + String regdt = ""; + String upddt = ""; + String deldt = ""; + String regmemid = ""; + String updmemid = ""; + String delmemid = ""; + String delyn = "N"; + String bdKogluseyn = ""; + String bdKogltype1 = ""; + String bdKogltype2 = ""; + + String groupCode = ""; + + String bdCodeName = ""; + + String bdThumb1 = ""; + String bdThumb2 = ""; + String bdThumb3 = ""; + + String bdThumb1Alt = ""; + String bdThumb2Alt = ""; + String bdThumb3Alt = ""; + + String fileId = ""; + String fileCnt = "0"; + + // 썸네일 이전파일명 + String oldBdThumb1 = ""; + String oldBdThumb2 = ""; + String oldBdThumb3 = ""; + + // 썸네일 삭제 + String thum1Del = "N"; + String thum2Del = "N"; + String thum3Del = "N"; + + //답변 내용, 답변 등록자 명 + String bdAnswer = ""; + String bdAnswerwriter = ""; + + //게시글연관아이디 + String ownId = ""; + + //동영상게시판 업로드 관련 + String howUpload = "0"; //동영상 첨부 방법 + String bdMovie = ""; //동영상 파일명 or 동영상 URL 링크 + String olgBdMovie = ""; //동영상 이전 파일명 or 이전 URL + + String bdSpare1 = "";//여분컬럼 + String bdSpare2 = ""; + String bdSpare3 = ""; + String bdSpare4 = ""; + + public String getBdIdx() { + return bdIdx; + } + public void setBdIdx(String bdIdx) { + this.bdIdx = bdIdx; + } + public String getBcId() { + return bcId; + } + public void setBcId(String bcId) { + this.bcId = bcId; + } + public String getBdCode() { + return bdCode; + } + public void setBdCode(String bdCode) { + this.bdCode = bdCode; + } + public String getBdWriter() { + return bdWriter; + } + public void setBdWriter(String bdWriter) { + this.bdWriter = bdWriter; + } + public String getBdTitle() { + return bdTitle; + } + public void setBdTitle(String bdTitle) { + this.bdTitle = bdTitle; + } + public String getBdContent() { + return bdContent; + } + public void setBdContent(String bdContent) { + this.bdContent = bdContent; + } + public String getBdReadnum() { + return bdReadnum; + } + public void setBdReadnum(String bdReadnum) { + this.bdReadnum = bdReadnum; + } + public String getBdNotice() { + return bdNotice; + } + public void setBdNotice(String bdNotice) { + this.bdNotice = bdNotice; + } + public String getBdNoticeTermyn() { + return bdNoticeTermyn; + } + public void setBdNoticeTermyn(String bdNoticeTermyn) { + this.bdNoticeTermyn = bdNoticeTermyn; + } + public String getBdNoticeSdt() { + return bdNoticeSdt; + } + public void setBdNoticeSdt(String bdNoticeSdt) { + this.bdNoticeSdt = bdNoticeSdt; + } + public String getBdNoticeEdt() { + return bdNoticeEdt; + } + public void setBdNoticeEdt(String bdNoticeEdt) { + this.bdNoticeEdt = bdNoticeEdt; + } + public String getNoticeOrder() { + return noticeOrder; + } + public void setNoticeOrder(String noticeOrder) { + this.noticeOrder = noticeOrder; + } + public String getBdUseyn() { + return bdUseyn; + } + public void setBdUseyn(String bdUseyn) { + this.bdUseyn = bdUseyn; + } + public String getBdUseTermyn() { + return bdUseTermyn; + } + public void setBdUseTermyn(String bdUseTermyn) { + this.bdUseTermyn = bdUseTermyn; + } + public String getBdUseSdt() { + return bdUseSdt; + } + public void setBdUseSdt(String bdUseSdt) { + this.bdUseSdt = bdUseSdt; + } + public String getBdUseEdt() { + return bdUseEdt; + } + public void setBdUseEdt(String bdUseEdt) { + this.bdUseEdt = bdUseEdt; + } + public String getBdPushyn() { + return bdPushyn; + } + public void setBdPushyn(String bdPushyn) { + this.bdPushyn = bdPushyn; + } + public String getBdIp() { + return bdIp; + } + public void setBdIp(String bdIp) { + this.bdIp = bdIp; + } + public String getBdReidx() { + return bdReidx; + } + public void setBdReidx(String bdReidx) { + this.bdReidx = bdReidx; + } + public String getBdRelevel() { + return bdRelevel; + } + public void setBdRelevel(String bdRelevel) { + this.bdRelevel = bdRelevel; + } + public String getBdReorder() { + return bdReorder; + } + public void setBdReorder(String bdReorder) { + this.bdReorder = bdReorder; + } + public String getRegdt() { + return regdt; + } + public void setRegdt(String regdt) { + this.regdt = regdt; + } + public String getUpddt() { + return upddt; + } + public void setUpddt(String upddt) { + this.upddt = upddt; + } + public String getDeldt() { + return deldt; + } + public void setDeldt(String deldt) { + this.deldt = deldt; + } + public String getRegmemid() { + return regmemid; + } + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + public String getUpdmemid() { + return updmemid; + } + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + public String getDelmemid() { + return delmemid; + } + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + public String getDelyn() { + return delyn; + } + public void setDelyn(String delyn) { + this.delyn = delyn; + } + public String getBdKogluseyn() { + return bdKogluseyn; + } + public void setBdKogluseyn(String bdKogluseyn) { + this.bdKogluseyn = bdKogluseyn; + } + public String getBdKogltype1() { + return bdKogltype1; + } + public void setBdKogltype1(String bdKogltype1) { + this.bdKogltype1 = bdKogltype1; + } + public String getBdKogltype2() { + return bdKogltype2; + } + public void setBdKogltype2(String bdKogltype2) { + this.bdKogltype2 = bdKogltype2; + } + public String getGroupCode() { + return groupCode; + } + public void setGroupCode(String groupCode) { + this.groupCode = groupCode; + } + public String getBdCodeName() { + return bdCodeName; + } + public void setBdCodeName(String bdCodeName) { + this.bdCodeName = bdCodeName; + } + public String getBdThumb1() { + return bdThumb1; + } + public void setBdThumb1(String bdThumb1) { + this.bdThumb1 = bdThumb1; + } + public String getBdThumb2() { + return bdThumb2; + } + public void setBdThumb2(String bdThumb2) { + this.bdThumb2 = bdThumb2; + } + public String getBdThumb3() { + return bdThumb3; + } + public void setBdThumb3(String bdThumb3) { + this.bdThumb3 = bdThumb3; + } + public String getBdThumb1Alt() { + return bdThumb1Alt; + } + public void setBdThumb1Alt(String bdThumb1Alt) { + this.bdThumb1Alt = bdThumb1Alt; + } + public String getBdThumb2Alt() { + return bdThumb2Alt; + } + public void setBdThumb2Alt(String bdThumb2Alt) { + this.bdThumb2Alt = bdThumb2Alt; + } + public String getBdThumb3Alt() { + return bdThumb3Alt; + } + public void setBdThumb3Alt(String bdThumb3Alt) { + this.bdThumb3Alt = bdThumb3Alt; + } + public String getFileId() { + return fileId; + } + public void setFileId(String fileId) { + this.fileId = fileId; + } + public String getFileCnt() { + return fileCnt; + } + public void setFileCnt(String fileCnt) { + this.fileCnt = fileCnt; + } + public String getOldBdThumb1() { + return oldBdThumb1; + } + public void setOldBdThumb1(String oldBdThumb1) { + this.oldBdThumb1 = oldBdThumb1; + } + public String getOldBdThumb2() { + return oldBdThumb2; + } + public void setOldBdThumb2(String oldBdThumb2) { + this.oldBdThumb2 = oldBdThumb2; + } + public String getOldBdThumb3() { + return oldBdThumb3; + } + public void setOldBdThumb3(String oldBdThumb3) { + this.oldBdThumb3 = oldBdThumb3; + } + public String getThum1Del() { + return thum1Del; + } + public void setThum1Del(String thum1Del) { + this.thum1Del = thum1Del; + } + public String getThum2Del() { + return thum2Del; + } + public void setThum2Del(String thum2Del) { + this.thum2Del = thum2Del; + } + public String getThum3Del() { + return thum3Del; + } + public void setThum3Del(String thum3Del) { + this.thum3Del = thum3Del; + } + public String getBdAnswer() { + return bdAnswer; + } + public void setBdAnswer(String bdAnswer) { + this.bdAnswer = bdAnswer; + } + public String getBdAnswerwriter() { + return bdAnswerwriter; + } + public void setBdAnswerwriter(String bdAnswerwriter) { + this.bdAnswerwriter = bdAnswerwriter; + } + public String getOwnId() { + return ownId; + } + public void setOwnId(String ownId) { + this.ownId = ownId; + } + public String getHowUpload() { + return howUpload; + } + public void setHowUpload(String howUpload) { + this.howUpload = howUpload; + } + public String getBdMovie() { + return bdMovie; + } + public void setBdMovie(String bdMovie) { + this.bdMovie = bdMovie; + } + public String getOlgBdMovie() { + return olgBdMovie; + } + public void setOlgBdMovie(String olgBdMovie) { + this.olgBdMovie = olgBdMovie; + } + public String getBdSpare1() { + return bdSpare1; + } + public void setBdSpare1(String bdSpare1) { + this.bdSpare1 = bdSpare1; + } + public String getBdSpare2() { + return bdSpare2; + } + public void setBdSpare2(String bdSpare2) { + this.bdSpare2 = bdSpare2; + } + public String getBdSpare3() { + return bdSpare3; + } + public void setBdSpare3(String bdSpare3) { + this.bdSpare3 = bdSpare3; + } + public String getBdSpare4() { + return bdSpare4; + } + public void setBdSpare4(String bdSpare4) { + this.bdSpare4 = bdSpare4; + } + +} diff --git a/src/main/java/egovframework/itgcms/core/board/service/MainBoardVO.java b/src/main/java/egovframework/itgcms/core/board/service/MainBoardVO.java new file mode 100644 index 0000000..2aa039e --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/board/service/MainBoardVO.java @@ -0,0 +1,58 @@ +package egovframework.itgcms.core.board.service; + +import java.util.ArrayList; +import java.util.List; + +public class MainBoardVO { + + private String anchorHref; + private String boardTitle; + private String boardSkin; + private String boardMemo; + + private List boardList; + + + public String getAnchorHref() { + return anchorHref; + } + + public void setAnchorHref(String anchorHref) { + this.anchorHref = anchorHref; + } + + public String getBoardTitle() { + return boardTitle; + } + + public void setBoardTitle(String boardTitle) { + this.boardTitle = boardTitle; + } + + public List getBoardList() { + if (this.boardList != null) { + return new ArrayList<>(this.boardList); + } + return null; + } + + public void setBoardList(List boardList) { + this.boardList = new ArrayList(boardList); + } + public void setBoardSkin(String boardSkin) { + this.boardSkin = boardSkin; + } + public String getBoardSkin() { + return boardSkin; + } + + public String getBoardMemo() { + return boardMemo; + } + + public void setBoardMemo(String boardMemo) { + this.boardMemo = boardMemo; + } + + +} diff --git a/src/main/java/egovframework/itgcms/core/board/service/impl/BoardMapper.java b/src/main/java/egovframework/itgcms/core/board/service/impl/BoardMapper.java new file mode 100644 index 0000000..8362e4a --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/board/service/impl/BoardMapper.java @@ -0,0 +1,213 @@ +/* + * Copyright 2011 MOPAS(Ministry of Public Mngristration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.board.service.impl; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import egovframework.itgcms.core.board.service.BoardReactionSearchVO; +import egovframework.itgcms.core.board.service.BoardSearchVO; +import egovframework.itgcms.core.board.service.BoardVO; +import egovframework.itgcms.core.board.service.MainBoardVO; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +/** + * board에 관한 데이터처리 매퍼 클래스 + * + * @author 표준프레임워크센터 + * @since 2014.01.24 + * @version 1.0 + * @see
    + *  == 개정이력(Modification Information) ==
    + *
    + *          수정일          수정자           수정내용
    + *  ----------------    ------------    ---------------------------
    + *   2014.01.24        표준프레임워크센터          최초 생성
    + *
    + * 
    + */ +@Mapper("boardMapper") +public interface BoardMapper { + + + + /** + * 글 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List boardList(BoardSearchVO searchVO) throws SQLException; + + /** + * 공지글 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List noticeList(BoardSearchVO searchVO) throws SQLException; + + /** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int boardListTotCnt(BoardSearchVO searchVO) throws SQLException; + + void boardRegistProc(BoardVO boardVO) throws SQLException; + + BoardVO boardView(BoardSearchVO searchVO) throws SQLException; + + void boardUpdateProc(BoardVO boardVO) throws SQLException; + + void boardDeleteProc(BoardVO boardVO)throws SQLException; + + void boardChkDelProc(BoardVO boardVO)throws SQLException; + + void boardChkDelProcJFile(BoardVO boardVO)throws SQLException; + + BoardVO getPrevBoardVO(BoardSearchVO boardSearchVO)throws SQLException; + + BoardVO getNextBoardVO(BoardSearchVO boardSearchVO)throws SQLException; + + void increaseReadnum(BoardSearchVO boardSearchVO)throws SQLException; + + void boardReplyProc(BoardVO boardVO)throws SQLException; + + void boardReplyUpdateReorder(BoardVO boardVO)throws SQLException; + + List boardMainList(BoardSearchVO boardSearchVO)throws SQLException; + + BoardVO boardRegInfo(BoardSearchVO searchVO) throws SQLException; + + /** + * 통합검색 + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List searchAll(BoardSearchVO searchVO) throws SQLException; + + String searchAllCnt(BoardSearchVO searchVO) throws SQLException; + + /** + * 글 목록을 조회한다.(글번호만 조회) + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List boardListAll(MngrBoardconfigVO mngrBoardconfigVO) throws SQLException; + + /** + * 체크된 게시판의 글 목록을 조회한다.(글번호만 조회) + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List chkBoardListAll(MngrBoardconfigVO mngrBoardconfigVO) throws SQLException; + + /** + * 게시판삭제에 의한 게시글 삭제처리 + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + void boardAutoDeleteProc(MngrBoardconfigVO mngrBoardconfigVO)throws SQLException; + + /** + * 체크박스 게시판삭제에 의한 게시글 삭제처리 + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + void boardChkAutoDeleteProc(MngrBoardconfigVO mngrBoardconfigVO)throws SQLException; + + /** + * RSS 글 목록 + * @param queryData 쿼리 데이터 + * @return 글 목록 + * @exception Exception + */ + List rssBoardList(Map queryData) throws SQLException; + + /** + * 게시글 엑셀 목록 + * @param menuCode 메뉴코드 + * @return 글 목록 + * @exception Exception + */ + List mngrBoardListForExcel(String menuCode) throws SQLException; + + /** + * 게시판 비밀번호 확인 + * @param paramMap 쿼리 데이터 + * @return 비밀번호 확인 결과 + * @exception Exception + */ + BoardVO boardPassCheck(Map paramMap) throws SQLException; + + /** + * 메인페이지 게시판 설정 값 + * @param paramMap 쿼리 데이터 + * @return 게시판 설정 값 + * @exception Exception + */ + MainBoardVO mainContentsMenuCode(Map paramMap)throws SQLException; + + /** + * 최근 글 목록 + * @param queryData 쿼리 데이터 + * @return 글 목록 + * @exception Exception + */ + List latestBbsList(Map queryData) throws SQLException; + + /** + * 답변이 달린 글 목록의 총 개수 + * @param searchVO - 조회할 정보가 담긴 VO + * @return 답변달린 글 목록 개수 + * @exception Exception + */ + int getReplyTotCnt(BoardReactionSearchVO searchVO) throws SQLException; + + /** + * 답변이 달린 글 목록의 총 개수 + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List getReplyList(BoardReactionSearchVO searchVO) throws SQLException; + + /** + * 댓글이 달린 글 목록의 총 개수 + * @param searchVO - 조회할 정보가 담긴 VO + * @return 답변달린 글 목록 개수 + * @exception Exception + */ + int getCommentTotCnt(BoardReactionSearchVO searchVO) throws SQLException; + + /** + * 댓글이 달린 글 목록의 총 개수 + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List getCommentList(BoardReactionSearchVO searchVO) throws SQLException; + +} diff --git a/src/main/java/egovframework/itgcms/core/board/service/impl/BoardServiceImpl.java b/src/main/java/egovframework/itgcms/core/board/service/impl/BoardServiceImpl.java new file mode 100644 index 0000000..f5dc131 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/board/service/impl/BoardServiceImpl.java @@ -0,0 +1,730 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.board.service.impl; + +import java.io.IOException; +import java.net.URLEncoder; +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 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.Service; +import org.springframework.ui.ModelMap; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import egovframework.com.ext.jfile.service.JFileService; +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.common.MngrSessionVO; +import egovframework.itgcms.common.UserSessionVO; +import egovframework.itgcms.core.board.service.BoardReactionSearchVO; +import egovframework.itgcms.core.board.service.BoardSearchVO; +import egovframework.itgcms.core.board.service.BoardService; +import egovframework.itgcms.core.board.service.BoardVO; +import egovframework.itgcms.core.board.service.MainBoardVO; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigVO; +import egovframework.itgcms.core.boardconfig.service.impl.MngrBoardconfigMapper; +import egovframework.itgcms.core.code.service.MngrCodeVO; +import egovframework.itgcms.core.code.service.impl.MngrCodeMapper; +import egovframework.itgcms.core.menu.service.impl.MngrMenuMapper; +import egovframework.itgcms.core.site.service.MngrSiteVO; +//import egovframework.itgcms.core.social.service.PostFacebookThread; +//import egovframework.itgcms.core.social.service.PostNaverBlogThread; +//import egovframework.itgcms.core.social.service.PostTwitterThread; +//import egovframework.itgcms.core.social.service.SocialMediaKeyVO; +//import egovframework.itgcms.core.social.service.impl.SocialMediaKeyMapper; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.psl.dataaccess.util.EgovMap; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +/** + * @파일명 : BoardServiceImpl.java + * @파일정보 : 게시판관리 서비스 구현 클래스 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Service("boardService") +public class BoardServiceImpl extends EgovAbstractServiceImpl implements BoardService { + +// private static final Logger LOGGER = LoggerFactory.getLogger(BoardServiceImpl.class); + + /** BoardDAO */ + // ibatis 사용 + /*@Resource(name="BoardDAO") + private BoardDAO boardDAO;*/ + // mybatis 사용 + @Resource(name="boardMapper") + private BoardMapper boardMapper; + + /** BoardconfigDAO */ + // ibatis 사용 + /*@Resource(name="BoardconfigDAO") + private BoardconfigDAO boardconfigDAO;*/ + // mybatis 사용 + @Resource(name="mngrBoardconfigMapper") + private MngrBoardconfigMapper mngrBoardconfigMapper; + + @Resource(name="mngrCodeMapper") + private MngrCodeMapper mngrCodeMapper; + + @Resource(name = "mngrMenuMapper") + private MngrMenuMapper mngrMenuMapper; + +// @Resource(name="socialMediaKeyMapper") +// private SocialMediaKeyMapper socialMediaKeyMapper; + + @Autowired + private JFileService service; + + + + + @Override + public String selectBoardList(ModelMap model, + MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, + BoardVO boardVO, HttpServletRequest request, + HttpServletResponse response, + String returnPage + ) throws IOException, SQLException { + + + int viewcount = 0; + if("0".equals(boardSearchVO.getViewCount())){ + viewcount = Integer.parseInt(mngrBoardconfigVO.getBcViewcount()); + }else{ + viewcount = Integer.parseInt(boardSearchVO.getViewCount()); + } + + boardSearchVO.setViewCount(String.valueOf(viewcount)); + boardSearchVO.setPageUnit(viewcount);//viewCount + boardSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(boardSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(boardSearchVO.getPageUnit()); + paginationInfo.setPageSize(boardSearchVO.getPageSize()); + + boardSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + boardSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + boardSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List noticeList = boardMapper.noticeList(boardSearchVO); + model.addAttribute("noticeList", noticeList); + List resultList = boardMapper.boardList(boardSearchVO); + model.addAttribute("resultList", resultList); + int totCnt = boardMapper.boardListTotCnt(boardSearchVO); + paginationInfo.setTotalRecordCount(totCnt); + + model.addAttribute("boardconfigVO", mngrBoardconfigVO); + model.addAttribute("searchVO", boardSearchVO); + model.addAttribute("boardVO", boardVO); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); //페이지 No 의 시작 값 가상의 넘버링 + + if("Y".equals(mngrBoardconfigVO.getBcGroupyn())){ + MngrCodeVO mngrCodeVO = new MngrCodeVO(); + mngrCodeVO.setUseType("board"); + mngrCodeVO.setSchCode(mngrBoardconfigVO.getBcGroupcode()); + model.addAttribute("codeList", mngrCodeMapper.mngrCodeList(mngrCodeVO)); + } + + return returnPage; + } + + + + + @Override + public String selectBoardRegist(ModelMap model, + MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, + BoardVO boardVO, HttpServletRequest request, + HttpServletResponse response, String returnPage) throws IOException, SQLException { + + boardSearchVO.setAct("REGIST"); + if("user".equals(boardSearchVO.getRoot())){ + boardVO.setBdWriter( CommUtil.getUserSessionVO() == null ? "" :CommUtil.getUserSessionVO().getName()); + } else if("_mngr_".equals(boardSearchVO.getRoot())){ + boardVO.setBdWriter(CommUtil.getMngrSessionVO().getName()); + } + + model.addAttribute("boardconfigVO", mngrBoardconfigVO); + model.addAttribute("searchVO", boardSearchVO); + model.addAttribute("boardVO", boardVO); + /* ######################################################################## + * 게시판 환경설정에서 카테고리 기능 사용인 경우 카테고리 목록 조회 + * ######################################################################## */ + if("Y".equals(mngrBoardconfigVO.getBcGroupyn())){ + MngrCodeVO mngrCodeVO = new MngrCodeVO(); + mngrCodeVO.setUseType("board"); + mngrCodeVO.setSchCode(mngrBoardconfigVO.getBcGroupcode()); + model.addAttribute("codeList", mngrCodeMapper.mngrCodeList(mngrCodeVO)); + } + + return returnPage; + } + + @Override + public String selectBoardView(ModelMap model, + MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, + BoardVO boardVO, HttpServletRequest request, + HttpServletResponse response, String returnPage) throws IOException, SQLException { + + boardSearchVO.setAct("UPDATE"); + + // 정보가져오기 + BoardVO resultBoardVO = boardMapper.boardView(boardSearchVO); + if(resultBoardVO == null){ + return CommUtil.doComplete(model, "오류", "데이터가 없습니다. 이미 삭제되었거나 잘못된 접속경로입니다.", "history.back()"); + } + + + model.addAttribute("boardconfigVO", mngrBoardconfigVO); + model.addAttribute("searchVO", boardSearchVO); + model.addAttribute("boardVO", resultBoardVO); + + /* ######################################################################## + * 게시판 환경설정에서 카테고리 기능 사용인 경우 카테고리 목록 조회 + * ######################################################################## */ + if("Y".equals(mngrBoardconfigVO.getBcGroupyn())){ + MngrCodeVO mngrCodeVO = new MngrCodeVO(); + mngrCodeVO.setUseType("board"); + mngrCodeVO.setSchCode(mngrBoardconfigVO.getBcGroupcode()); + model.addAttribute("codeList", mngrCodeMapper.mngrCodeList(mngrCodeVO)); + } + + /* ######################################################################## + * 게시판 환경설정에서 이전글/다음글 기능 사용인 경우 이전글/다음글 가져오기 + * ######################################################################## */ + if("Y".equals(mngrBoardconfigVO.getBcPrevnextyn())){ + model.addAttribute("prevBoardVO", boardMapper.getPrevBoardVO(boardSearchVO)); + model.addAttribute("nextBoardVO", boardMapper.getNextBoardVO(boardSearchVO)); + } + + + return returnPage; + } + + @Override + public String selectBoardReply(ModelMap model, + MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, + BoardVO boardVO, HttpServletRequest request, + HttpServletResponse response, String returnPage) throws IOException, SQLException { + + boardSearchVO.setAct("REPLY"); + + boardVO = new BoardVO(); + + String bdWriter = ""; + + if("user".equals(boardSearchVO.getRoot())){ + UserSessionVO UserSessionVO = CommUtil.getUserSessionVO(); + if(UserSessionVO != null){ + bdWriter = UserSessionVO.getName(); + } + } else if("_mngr_".equals(boardSearchVO.getRoot())){ + MngrSessionVO mngrSessionVO = CommUtil.getMngrSessionVO(); + if(mngrSessionVO != null){ + bdWriter = mngrSessionVO.getName(); + } + } + + boardVO.setBdWriter(bdWriter); + + // 정보가져오기 + BoardVO resultBoardVO = boardMapper.boardView(boardSearchVO); + if(resultBoardVO == null){ + return CommUtil.doComplete(model, "오류", "데이터가 없습니다. 이미 삭제되었거나 잘못된 접속경로입니다.", "history.back()"); + } + + boardVO.setBdTitle("Re : " + resultBoardVO.getBdTitle()); + + model.addAttribute("boardconfigVO", mngrBoardconfigVO); + model.addAttribute("searchVO", boardSearchVO); + model.addAttribute("boardVO", boardVO); + model.addAttribute("oldBoardVO", resultBoardVO); + + /* ######################################################################## + * 게시판 환경설정에서 카테고리 기능 사용인 경우 카테고리 목록 조회 + * ######################################################################## */ + if("Y".equals(mngrBoardconfigVO.getBcGroupyn())){ + MngrCodeVO mngrCodeVO = new MngrCodeVO(); + mngrCodeVO.setUseType("board"); + mngrCodeVO.setSchCode(mngrBoardconfigVO.getBcGroupcode()); + model.addAttribute("codeList", mngrCodeMapper.mngrCodeList(mngrCodeVO)); + } + + return returnPage; + + } + + @Override + public String insertBoardRegistProc(ModelMap model, + MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, + BoardVO boardVO, HttpServletRequest request, + HttpServletResponse response, String returnPage) throws IOException, SQLException { + boardVO.setRegmemid(boardSearchVO.getSchRegmemid()); + if("user".equals(boardSearchVO.getRoot())){ + String bdWriter = boardVO.getBdWriter(); + if("".equals(bdWriter)){ + boardVO.setBdWriter( CommUtil.getUserSessionVO() == null ? "" :CommUtil.getUserSessionVO().getName() ); + } + } else if("_mngr_".equals(boardSearchVO.getRoot())){ + boardVO.setBdWriter(CommUtil.getMngrSessionVO().getName()); + } + boardVO.setBdIp(CommUtil.getUserIP()); + + // 첨부파일 + getUploadFile(request, mngrBoardconfigVO, boardSearchVO, boardVO); // boardVO에 bdThumb1, 2, 3에 파일명이 업데이트 됨. + + // 동영상 업로드 + if("1".equals(boardVO.getHowUpload())) getMvUploadFile(request, mngrBoardconfigVO, boardSearchVO, boardVO); //boardVO.bdMovie + + boardVO.setBdContent(CommUtil.decodeHTMLTagFilter(boardVO.getBdContent())); + boardMapper.boardRegistProc(boardVO); + + postingSocialMedia(boardVO, boardSearchVO, request); + + return ""; + } + + @Override + public String updateBoardUpdateProc(ModelMap model, + MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, + BoardVO boardVO, HttpServletRequest request, + HttpServletResponse response, String returnPage) throws IOException, SQLException { + if("".equals( CommUtil.isNull(boardVO.getId(), ""))) return "게시물 인덱스 정보가 없습니다."; + + boardVO.setUpdmemid(boardSearchVO.getSchRegmemid()); + + // 첨부파일 + getUploadFile(request, mngrBoardconfigVO, boardSearchVO, boardVO); // boardVO에 bdThumb1, 2, 3에 파일명이 업데이트 됨. + // 동영상 업로드 + if("1".equals(boardVO.getHowUpload())) getMvUploadFile(request, mngrBoardconfigVO, boardSearchVO, boardVO); //boardVO.bdMovie + + boardVO.setBdContent(CommUtil.decodeHTMLTagFilter(boardVO.getBdContent())); + boardMapper.boardUpdateProc(boardVO); + return ""; + } + + @Override + public String insertBoardReplyProc(ModelMap model, + MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, + BoardVO boardVO, HttpServletRequest request, + HttpServletResponse response, String returnPage) throws IOException, SQLException { + if("".equals( CommUtil.isNull(boardVO.getId(), ""))) return "게시물 인덱스 정보가 없습니다."; + + // 정보가져오기 + BoardVO resultBoardVO = boardMapper.boardView(boardSearchVO); + if(resultBoardVO == null){ + return CommUtil.doComplete(model, "오류", "데이터가 없습니다. 이미 삭제되었거나 잘못된 접속경로입니다.", "history.back()"); + } + + String reidx = resultBoardVO.getBdReidx(); + String relevel = resultBoardVO.getBdRelevel(); + String reorder = resultBoardVO.getBdReorder(); + + int newRelevel = Integer.parseInt(relevel) + 1; + int newReorder = Integer.parseInt(reorder) + 1; + + boardVO.setBdReidx(reidx); + boardVO.setBdRelevel(String.valueOf(newRelevel)); + boardVO.setBdReorder(String.valueOf(newReorder)); + + if("user".equals(boardSearchVO.getRoot())){ + + if (CommUtil.getUserSessionVO()==null) { + boardVO.setBdWriter(boardVO.getBdWriter()); + } else { + boardVO.setBdWriter(CommUtil.getUserSessionVO().getName()); + } + + + } else if("_mngr_".equals(boardSearchVO.getRoot())){ + boardVO.setBdWriter(CommUtil.getMngrSessionVO().getName()); + } + boardVO.setRegmemid(boardSearchVO.getSchRegmemid()); + + boardMapper.boardReplyUpdateReorder(boardVO); + + boardMapper.boardReplyProc(boardVO); + + return ""; + } + + @Override + public String updateBoardDeleteProc(ModelMap model, + MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, + BoardVO boardVO, HttpServletRequest request, + HttpServletResponse response, String returnPage) throws IOException, SQLException { + + BoardVO tmpBoardVO = boardMapper.boardView(boardVO); //삭제할 파일 정보 조회하기 위해 정보가져옴. + + boardVO.setDelmemid(boardSearchVO.getSchRegmemid()); + boardMapper.boardDeleteProc(boardVO); + + // 파일 삭제처리 + if(tmpBoardVO != null && !"".equals(CommUtil.isNull(tmpBoardVO.getFileId(), ""))){ + service.updateAttachFileDeleteYnByFileId(tmpBoardVO.getFileId(), "Y"); //jfile 삭제여부 Y처리해도 목록 조회가 가능함(게시물이 삭제처리되서 나올일은 없음) + } + return ""; + } + + @Override + public String updateBoardChkDelProc(ModelMap model, + MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, + BoardVO boardVO, HttpServletRequest request, + HttpServletResponse response, String returnPage) throws IOException, SQLException { + + boardMapper.boardChkDelProc(boardVO); + + boardMapper.boardChkDelProcJFile(boardVO); + + return ""; + } + + @Override + public List selectBoardMainList(BoardSearchVO boardSearchVO) throws IOException, SQLException { + return boardMapper.boardMainList(boardSearchVO); + } + + private void getUploadFile(HttpServletRequest request, MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, BoardVO boardVO) throws IOException, SQLException{ + if("Y".equals(mngrBoardconfigVO.getBcThumbyn())){ + MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request; //다중파일 업로드 + final Map files = multiRequest.getFileMap(); + for(int i = 0; i < Integer.parseInt(mngrBoardconfigVO.getBcThumbcount()); i++){ + HashMap hmFile = CommUtil.fileUploadImageThumbail(multiRequest.getFileMap(), "bdThumb" + String.valueOf(i + 1), "gallery", mngrBoardconfigVO.getBcThumbwidth(), mngrBoardconfigVO.getBcThumbheight(), "Y".equals(mngrBoardconfigVO.getBcThumbratioyn())?true:false); + + if(hmFile != null){ + if(i == 0){ + boardVO.setBdThumb1(String.valueOf(hmFile.get("F_SAVENAME"))); + //파일 삭제 + //원본이미지 + String img = CommUtil.getFileRoot() + System.getProperty("file.separator") + "gallery" + System.getProperty("file.separator") + boardVO.getOldBdThumb1(); + String imgB = CommUtil.getFileRoot() + System.getProperty("file.separator") + "gallery" + System.getProperty("file.separator") + CommUtil.getThumbFileName(boardVO.getOldBdThumb1(), "B"); + CommUtil.deleteFile(img); + CommUtil.deleteFile(imgB); + }else if(i == 1){ + boardVO.setBdThumb2(String.valueOf(hmFile.get("F_SAVENAME"))); + //파일 삭제 + //원본이미지 + String img = CommUtil.getFileRoot() + System.getProperty("file.separator") + "gallery" + System.getProperty("file.separator") + boardVO.getOldBdThumb2(); + String imgB = CommUtil.getFileRoot() + System.getProperty("file.separator") + "gallery" + System.getProperty("file.separator") + CommUtil.getThumbFileName(boardVO.getOldBdThumb2(), "B"); + CommUtil.deleteFile(img); + CommUtil.deleteFile(imgB); + }else if(i == 2){ + boardVO.setBdThumb3(String.valueOf(hmFile.get("F_SAVENAME"))); + //파일 삭제 + //원본이미지 + String img = CommUtil.getFileRoot() + System.getProperty("file.separator") + "gallery" + System.getProperty("file.separator") + boardVO.getOldBdThumb3(); + String imgB = CommUtil.getFileRoot() + System.getProperty("file.separator") + "gallery" + System.getProperty("file.separator") + CommUtil.getThumbFileName(boardVO.getOldBdThumb3(), "B"); + CommUtil.deleteFile(img); + CommUtil.deleteFile(imgB); + } + }else{ // 첨부파일이 없으면 update 시 처리 + if(i == 0){ + boardVO.setBdThumb1(boardVO.getOldBdThumb1()); + }else if(i == 1){ + boardVO.setBdThumb2(boardVO.getOldBdThumb2()); + }else if(i == 2){ + boardVO.setBdThumb3(boardVO.getOldBdThumb3()); + } + } + } + + } + } + + private void getMvUploadFile(HttpServletRequest request, MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, BoardVO boardVO) throws IOException, SQLException{ + MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request; //다중파일 업로드 + final Map files = multiRequest.getFileMap(); + HashMap hmFile = CommUtil.fileUpload(multiRequest.getFileMap(), "mvFile1", "movie", ""); + if(hmFile != null){ + boardVO.setBdMovie(String.valueOf(hmFile.get("F_SAVENAME"))); + //파일 삭제 + //원본이미지 + String mv = CommUtil.getFileRoot() + System.getProperty("file.separator") + "movie" + System.getProperty("file.separator") + boardVO.getOlgBdMovie(); + String mvB = CommUtil.getFileRoot() + System.getProperty("file.separator") + "movie" + System.getProperty("file.separator") + CommUtil.getThumbFileName(boardVO.getOlgBdMovie(), "B"); + CommUtil.deleteFile(mv); + CommUtil.deleteFile(mvB); + }else{ // 첨부파일이 없으면 update 시 처리 + boardVO.setBdMovie(boardVO.getOlgBdMovie()); + } + } + + @Override + public void updateIncreaseReadnum(BoardSearchVO boardSearchVO) + throws IOException, SQLException { + boardMapper.increaseReadnum(boardSearchVO); + } + + @Override + public BoardVO selectBoardRegInfo(BoardSearchVO boardSearchVO) throws IOException, SQLException { + // TODO Auto-generated method stub + return boardMapper.boardRegInfo(boardSearchVO); + } + + /* 통합 검색 관련 S */ + @Override + public String searchAll(ModelMap model, + MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, + BoardVO boardVO, HttpServletRequest request, + HttpServletResponse response, + String returnPage + ) throws IOException, SQLException { + + String introMsg = "검색을 통해 유용한 정보를 더욱 손쉽게 제공해 드리고자 통합 검색 서비스를 제공합니다"; + List siteList = boardVO.getSchSiteList(); //사이트리스트 + List siteResultList = new ArrayList(); + + boardVO.setRecordCountPerPage(5); //한 카테고리당 다섯개 + for (int sCnt = 0; sCnt < siteList.size(); sCnt++) {// 사이트리스트 + + //사이트코드에 해당하는 게시판메뉴리스트가져오기 + EgovMap siteResult = new EgovMap(); //사이트 별 결과값 컨테이너 + siteResult.put("siteCode", siteList.get(sCnt).getSiteCode()); //사이트 정보 + siteResult.put("siteName", siteList.get(sCnt).getSiteName()); //사이트 정보 + List configList = mngrMenuMapper.getBoardListbySitecode(siteResult); + List configResultList = new ArrayList(); + //siteMap.put("configList", configList); //사이트 게시판리스트 + + for (int i = 0; i < configList.size(); i++) { + EgovMap boardConfigMap = configList.get(i); //게시판 별 결과값 컨테이너 + boardVO.setBcId(boardConfigMap.get("bcId").toString()); + List bbsResultList = (List) boardMapper.searchAll(boardVO); //게시판별 게시 글 + String bbsCnt = boardMapper.searchAllCnt(boardVO); //게시판별 검색 글 전체 카운트 + boardConfigMap.put("bbsResultList", bbsResultList); + boardConfigMap.put("bbsCnt", bbsCnt); + configResultList.add(boardConfigMap); + } + siteResult.put("boardConfigList", configResultList); + siteResultList.add(siteResult); + } + + model.addAttribute("introMsg", introMsg); + model.addAttribute("siteResultList", siteResultList); + model.addAttribute("boardVO", boardVO); + + //List countList = new ArrayList(); + //List> ListinList = new ArrayList>(); + + /*//int j = 0; + int listCnt = 0; + for (int sCnt = 0; sCnt < boardVO.getSchSiteList().size(); sCnt++) {// 사이트리스트 + + //사이트코드에 해당하는 게시판메뉴리스트가져오기 + EgovMap paramMap = new EgovMap(); + paramMap.put("root", boardVO.getSchSiteList().get(sCnt)); + configList = mngrMenuMapper.getBoardListbySitecode(paramMap); + + for (int i = 0; i < configList.size(); i++) {// + MngrBoardconfigVO configGetVO = (MngrBoardconfigVO) configList.get(i); + boardVO.setBcId(configGetVO.getBcId()); + boardVO.setRecordCountPerPage(5); //한 카테고리당 다섯개 + bbsResultList = boardMapper.searchAll(boardVO); //게시판별 게시 글 + String bbsCnt = boardMapper.searchAllCnt(boardVO); //게시판별 검색 글 카운트 + configGetVO.setBoardCnt(bbsCnt); + configGetVO.setSchSitecode(boardVO.getSchSite()); + ListinList.add(j, resultList); + countList.add(j, configGetVO); + //j++; + if(!resultList.isEmpty()) listCnt++; + } + } + model.addAttribute("introMsg", introMsg); + model.addAttribute("listCnt", listCnt); + model.addAttribute("boardVO", boardVO); + model.addAttribute("siteList", siteList); + model.addAttribute("ListinList", ListinList); + model.addAttribute("configList", configList); + model.addAttribute("countList", countList);*/ + + return returnPage; + } + /* 통합 검색 관련 E */ + + @Override + public List getBoardList(String root, String menuCode, int limitNum) throws IOException, SQLException{ + HashMap queryData = new HashMap<>(); + + queryData.put("root", root); + queryData.put("menuCode", menuCode); + queryData.put("limitNum", limitNum); + + return boardMapper.latestBbsList(queryData); + } + @Override + public List getBoardList(String root, String menuCode) throws IOException, SQLException{ + Map queryData = new HashMap<>(); + + queryData.put("root", root); + queryData.put("menuCode", menuCode); + + return boardMapper.rssBoardList(queryData); + } + + @Override + public List selectBBSExcelData(String menuCode) throws IOException, SQLException { + return boardMapper.mngrBoardListForExcel(menuCode); + } + + @Override + public ItgMap redirectNoticePage(String boardCode, String siteCode) throws IOException, SQLException { + Map paramMap = new HashMap<>(); + + paramMap.put("boardCode", boardCode); + paramMap.put("siteCode", siteCode); + + ItgMap resultMap = mngrMenuMapper.getMenuInfoByBoardCode(paramMap); + return resultMap; + } + + @Override + public boolean boardPassCheck(String bdIndex, String pass) throws IOException, SQLException{ + Map paramMap = new HashMap<>(); + paramMap.put("pass", pass); + paramMap.put("bdIndex", bdIndex); + + if (boardMapper.boardPassCheck(paramMap)!=null) { + return true; + } + return false; + } + + @Override + public MngrBoardconfigVO getBoardconfigViewByMenuCode(String menuCode) throws IOException, SQLException { + return mngrBoardconfigMapper.mngrGetBoardConfigByMenuCode(menuCode); + } + + + @Override + public MainBoardVO latestBbsMenuSchBcid(String menuCode, String root) throws IOException, SQLException { + Map paramMap = new HashMap<>(); + paramMap.put("menuCode", menuCode); + paramMap.put("siteCode", root); + return boardMapper.mainContentsMenuCode(paramMap); + } + + @Override + public int getReplyTotCnt(BoardReactionSearchVO searchVO) throws IOException, SQLException { + return boardMapper.getReplyTotCnt(searchVO); + } + + @Override + public List selectReplyList(BoardReactionSearchVO searchVO) throws IOException, SQLException { + return boardMapper.getReplyList(searchVO); + } + + @Override + public int getCommentTotCnt(BoardReactionSearchVO searchVO) throws IOException, SQLException { + return boardMapper.getCommentTotCnt(searchVO); + } + + @Override + public List selectCommentList(BoardReactionSearchVO searchVO) throws IOException, SQLException { + return boardMapper.getCommentList(searchVO); + } + + @Override + public void postingSocialMedia(BoardVO boardVO, BoardSearchVO boardSearchVO, HttpServletRequest request) throws IOException, SQLException { + +// String[] smNameArr = request.getParameterValues("postingExternalSite"); +// +// StringBuffer url = request.getRequestURL(); +// +// int idx = url.indexOf("WEB-INF"); +// +// if (idx < 0) { +// idx = url.indexOf("_mngr_"); +// } +// +// String strUrl = url.substring(0, idx); +// +// Map tmp = new HashMap<>(); +// tmp.put("siteCode", boardSearchVO.getSiteCode()); +// tmp.put("boardCode", boardSearchVO.getSchBcid()); +// tmp = mngrMenuMapper.getMenuInfoByBoardCode(tmp); +// +// if (smNameArr!= null) { +// for (String smName : smNameArr) { +// +// SocialMediaKeyVO vo = new SocialMediaKeyVO(); +// vo.setSiteCode(boardSearchVO.getSiteCode()); +// vo.setSmName(smName); +// +// vo = socialMediaKeyMapper.getSocialMediaKey(vo); +// +// if (vo != null) { +// Map paramMap = new HashMap<>(); +// +// String noHTML = request.getParameter("noHTML"); +// +// if (noHTML != null && noHTML.length() > 100) { +// noHTML = noHTML.substring(0, 100).concat("..... "); +// } +// +// Thread postingThread = null; +// +// if ("facebook".equals(smName)) { +// paramMap.put("message", noHTML); +// paramMap.put("name", boardVO.getBdTitle()); +// paramMap.put("link", strUrl.concat("/").concat(boardSearchVO.getSiteCode()).concat("/contents/").concat(tmp.get("menuCode")).concat(".do?schM=view&id=").concat(boardVO.getBdIdx())); +// paramMap.put("access_token", vo.getSmAccesstoken()); +// +// postingThread = new PostFacebookThread(paramMap, vo.getSmUserid()); +// +// } else if ("naver".equals(smName)) { +// paramMap.put("title", URLEncoder.encode(boardVO.getBdTitle(), "UTF-8")); +// paramMap.put("contents", URLEncoder.encode(boardVO.getBdContent(), "UTF-8")); +// paramMap.put("categoryNo", vo.getEtc2()); +// paramMap.put("Authorization", "Bearer ".concat(vo.getSmAccesstoken())); +// +// postingThread = new PostNaverBlogThread(paramMap); +// +// } else if ("twitter".equals(smName)) { +// paramMap.put("appKey", vo.getSmAppkey()); +// paramMap.put("sceretKey", vo.getSmSecretkey()); +// paramMap.put("requestToken", vo.getEtc2()); +// +// postingThread = new PostTwitterThread(paramMap); +// } +// +// if (postingThread != null) { +// postingThread.start(); +// } +// } +// } +// } + } +} diff --git a/src/main/java/egovframework/itgcms/core/boardconfig/service/MngrBoardconfigSearchVO.java b/src/main/java/egovframework/itgcms/core/boardconfig/service/MngrBoardconfigSearchVO.java new file mode 100644 index 0000000..b57fae8 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/boardconfig/service/MngrBoardconfigSearchVO.java @@ -0,0 +1,41 @@ +package egovframework.itgcms.core.boardconfig.service; + +import java.io.IOException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO;; + +public class MngrBoardconfigSearchVO extends DefaultVO { + /** + * + */ + private static final long serialVersionUID = 5358593433818756365L; + + private static final Logger logger = LogManager.getLogger(MngrBoardconfigSearchVO.class); + + /** 관리자 아이디 */ + String id = ""; //검색조건 유지 + + String query = ""; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + + public String getQuery() { + String query = super.queryString(); + try{ + query += "&id=" + java.net.URLEncoder.encode(this.id, "UTF-8"); + }catch(IOException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/boardconfig/service/MngrBoardconfigService.java b/src/main/java/egovframework/itgcms/core/boardconfig/service/MngrBoardconfigService.java new file mode 100644 index 0000000..c3c3b9c --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/boardconfig/service/MngrBoardconfigService.java @@ -0,0 +1,104 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.boardconfig.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +/** + * @파일명 : MngrBoardconfigService.java + * @파일정보 : 관리자관리 서비스 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface MngrBoardconfigService { + + /** + * 글 목록을 조회한다. + * @param mngrBoardconfigSearchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List mngrBoardconfigList(MngrBoardconfigSearchVO mngrBoardconfigSearchVO) throws IOException, SQLException; + + /** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrBoardconfigListTotCnt(MngrBoardconfigSearchVO mngrBoardconfigSearchVO) throws IOException, SQLException; + + /** + * 등록 저장 처리 + * @param mngrBoardconfigVO + * @throws IOException, SQLException + */ + void mngrBoardconfigRegistProc(MngrBoardconfigVO mngrBoardconfigVO) throws IOException, SQLException; + + /** + * 조회 + * @param mngrBoardconfigSearchVO + * @return + * @throws IOException, SQLException + */ + MngrBoardconfigVO mngrBoardconfigView(MngrBoardconfigSearchVO mngrBoardconfigSearchVO) throws IOException, SQLException; + + /** + * 수정 처리 + * @param mngrBoardconfigVO + * @throws IOException, SQLException + */ + void mngrBoardconfigUpdateProc(MngrBoardconfigVO mngrBoardconfigVO) throws IOException, SQLException; + + /** + * 삭제 처리 + * @param mngrBoardconfigVO + * @throws IOException, SQLException + */ + void mngrBoardconfigDelProc(MngrBoardconfigVO mngrBoardconfigVO)throws IOException, SQLException; + + /** + * 다중 삭제 + * @param mngrBoardconfigVO + * @throws IOException, SQLException + */ + void mngrBoardconfigChkDelProc(MngrBoardconfigVO mngrBoardconfigVO)throws IOException, SQLException; + + /** + * 게시판 아이디 중복 조회 + * @param mngrBoardconfigSearchVO + * @return + * @throws IOException, SQLException + */ + int mngrBoardconfigCheckId(MngrBoardconfigSearchVO mngrBoardconfigSearchVO)throws IOException, SQLException; + + /** + * 게시판 목록 Ajax + * @param mngrBoardconfigSearchVO + * @return + * @throws IOException, SQLException + */ + List mngrBoardconfigListAjax(MngrBoardconfigSearchVO mngrBoardconfigSearchVO)throws IOException, SQLException; + +} diff --git a/src/main/java/egovframework/itgcms/core/boardconfig/service/MngrBoardconfigVO.java b/src/main/java/egovframework/itgcms/core/boardconfig/service/MngrBoardconfigVO.java new file mode 100644 index 0000000..f80ae96 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/boardconfig/service/MngrBoardconfigVO.java @@ -0,0 +1,345 @@ +package egovframework.itgcms.core.boardconfig.service; + + +public class MngrBoardconfigVO extends MngrBoardconfigSearchVO{ + private static final long serialVersionUID = 7992967475788187625L; + + String bcId = ""; + String bcName = ""; + String bcSkin = ""; + String bcTopinfo = ""; + String bcViewcount = ""; + + String bcList = ""; + String bcView = ""; + String bcRegist = ""; + String bcUpdate = ""; + String bcReply = ""; + + String bcMngrList = ""; + String bcMngrView = ""; + String bcMngrRegist = ""; + String bcMngrUpdate = ""; + String bcMngrReply = ""; + + String bcReplyyn = ""; + String bcFileyn = ""; + String bcNoticeyn = ""; + String bcGroupyn = ""; + String bcGroupcode = ""; + String bcFilecount = ""; + String bcFilesize = ""; + String bcDefaultpage = ""; + String regdt = ""; + String upddt = ""; + String deldt = ""; + String regmemid = ""; + String updmemid = ""; + String delmemid = ""; + String delyn = ""; + String groupCode = ""; + String bcEditoryn = ""; + String bcPrevnextyn = ""; + String bcKoglyn = ""; + + //썸네일 관련 + String bcThumbyn = "N"; //썸네일 사용여부 Y|N + String bcThumbcount = "1"; //썸네일 갯수 1~3 + String bcThumbwidth = "100"; //썸네일 가로 사이즈 + String bcThumbheight = "100"; //썸네일 세로 사이즈 + String bcThumbratioyn = "N"; //썸네일 비율 유지 여부 Y비율 유지, N비율무시 + + String boardCnt = "0"; + String menuCode = ""; + String menuName = ""; + + String bcRSS = "N"; + int bcComment = 0; + /** + * 첨부파일 확장자 descripter + * all(모든 파일), + * image(그림 파일), + * doc(문서 파일), + * video(동영상 파일), + * video(audio 파일), + * cmpf(압축) + * '*.exe' 형식으로 입력하면 확장자단위로 추가도 됨. + * 구분은 ; 예 ) image;doc;*.exe;cmpf + **/ + String bcFileTypeDesc = "all"; + + public String getBcId() { + return bcId; + } + public void setBcId(String bcId) { + this.bcId = bcId; + } + public String getBcName() { + return bcName; + } + public void setBcName(String bcName) { + this.bcName = bcName; + } + public String getBcSkin() { + return bcSkin; + } + public void setBcSkin(String bcSkin) { + this.bcSkin = bcSkin; + } + public String getBcTopinfo() { + return bcTopinfo; + } + public void setBcTopinfo(String bcTopinfo) { + this.bcTopinfo = bcTopinfo; + } + public String getBcViewcount() { + return bcViewcount; + } + public void setBcViewcount(String bcViewcount) { + this.bcViewcount = bcViewcount; + } + public String getBcList() { + return bcList; + } + public void setBcList(String bcList) { + this.bcList = bcList; + } + public String getBcView() { + return bcView; + } + public void setBcView(String bcView) { + this.bcView = bcView; + } + public String getBcRegist() { + return bcRegist; + } + public void setBcRegist(String bcRegist) { + this.bcRegist = bcRegist; + } + public String getBcUpdate() { + return bcUpdate; + } + public void setBcUpdate(String bcUpdate) { + this.bcUpdate = bcUpdate; + } + public String getBcReply() { + return bcReply; + } + public void setBcReply(String bcReply) { + this.bcReply = bcReply; + } + + + + public String getBcMngrList() { + return bcMngrList; + } + public void setBcMngrList(String bcMngrList) { + this.bcMngrList = bcMngrList; + } + public String getBcMngrView() { + return bcMngrView; + } + public void setBcMngrView(String bcMngrView) { + this.bcMngrView = bcMngrView; + } + public String getBcMngrRegist() { + return bcMngrRegist; + } + public void setBcMngrRegist(String bcMngrRegist) { + this.bcMngrRegist = bcMngrRegist; + } + public String getBcMngrUpdate() { + return bcMngrUpdate; + } + public void setBcMngrUpdate(String bcMngrUpdate) { + this.bcMngrUpdate = bcMngrUpdate; + } + public String getBcMngrReply() { + return bcMngrReply; + } + public void setBcMngrReply(String bcMngrReply) { + this.bcMngrReply = bcMngrReply; + } + + public String getBcReplyyn() { + return bcReplyyn; + } + public void setBcReplyyn(String bcReplyyn) { + this.bcReplyyn = bcReplyyn; + } + public String getBcFileyn() { + return bcFileyn; + } + public void setBcFileyn(String bcFileyn) { + this.bcFileyn = bcFileyn; + } + public String getBcNoticeyn() { + return bcNoticeyn; + } + public void setBcNoticeyn(String bcNoticeyn) { + this.bcNoticeyn = bcNoticeyn; + } + public String getBcGroupyn() { + return bcGroupyn; + } + public void setBcGroupyn(String bcGroupyn) { + this.bcGroupyn = bcGroupyn; + } + public String getBcGroupcode() { + return bcGroupcode; + } + public void setBcGroupcode(String bcGroupcode) { + this.bcGroupcode = bcGroupcode; + } + public String getBcFilecount() { + return bcFilecount; + } + public void setBcFilecount(String bcFilecount) { + this.bcFilecount = bcFilecount; + } + public String getBcFilesize() { + return bcFilesize; + } + public void setBcFilesize(String bcFilesize) { + this.bcFilesize = bcFilesize; + } + public String getBcDefaultpage() { + return bcDefaultpage; + } + public void setBcDefaultpage(String bcDefaultpage) { + this.bcDefaultpage = bcDefaultpage; + } + public String getRegdt() { + return regdt; + } + public void setRegdt(String regdt) { + this.regdt = regdt; + } + public String getUpddt() { + return upddt; + } + public void setUpddt(String upddt) { + this.upddt = upddt; + } + public String getDeldt() { + return deldt; + } + public void setDeldt(String deldt) { + this.deldt = deldt; + } + public String getRegmemid() { + return regmemid; + } + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + public String getUpdmemid() { + return updmemid; + } + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + public String getDelmemid() { + return delmemid; + } + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + public String getDelyn() { + return delyn; + } + public void setDelyn(String delyn) { + this.delyn = delyn; + } + public String getGroupCode() { + return groupCode; + } + public void setGroupCode(String groupCode) { + this.groupCode = groupCode; + } + public String getBcEditoryn() { + return bcEditoryn; + } + public void setBcEditoryn(String bcEditoryn) { + this.bcEditoryn = bcEditoryn; + } + public String getBcPrevnextyn() { + return bcPrevnextyn; + } + public void setBcPrevnextyn(String bcPrevnextyn) { + this.bcPrevnextyn = bcPrevnextyn; + } + public String getBcKoglyn() { + return bcKoglyn; + } + public void setBcKoglyn(String bcKoglyn) { + this.bcKoglyn = bcKoglyn; + } + public String getBoardCnt() { + return boardCnt; + } + public void setBoardCnt(String boardCnt) { + this.boardCnt = boardCnt; + } + public String getBcThumbyn() { + return bcThumbyn; + } + public void setBcThumbyn(String bcThumbyn) { + this.bcThumbyn = bcThumbyn; + } + public String getBcThumbcount() { + return bcThumbcount; + } + public void setBcThumbcount(String bcThumbcount) { + this.bcThumbcount = bcThumbcount; + } + public String getBcThumbwidth() { + return bcThumbwidth; + } + public void setBcThumbwidth(String bcThumbwidth) { + this.bcThumbwidth = bcThumbwidth; + } + public String getBcThumbheight() { + return bcThumbheight; + } + public void setBcThumbheight(String bcThumbheight) { + this.bcThumbheight = bcThumbheight; + } + public String getBcThumbratioyn() { + return bcThumbratioyn; + } + public void setBcThumbratioyn(String bcThumbratioyn) { + this.bcThumbratioyn = bcThumbratioyn; + } + public String getMenuCode() { + return menuCode; + } + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + public String getMenuName() { + return menuName; + } + public void setMenuName(String menuName) { + this.menuName = menuName; + } + public void setBcFileTypeDesc(String bcFileTypeDesc) { + this.bcFileTypeDesc = bcFileTypeDesc; + } + public String getBcFileTypeDesc() { + return bcFileTypeDesc; + } + public String getBcRSS() { + return bcRSS; + } + public void setBcRSS(String bcRSS) { + this.bcRSS = bcRSS; + } + public void setBcComment(int bcComment) { + this.bcComment = bcComment; + } + public int getBcComment() { + return bcComment; + } +} diff --git a/src/main/java/egovframework/itgcms/core/boardconfig/service/impl/MngrBoardconfigMapper.java b/src/main/java/egovframework/itgcms/core/boardconfig/service/impl/MngrBoardconfigMapper.java new file mode 100644 index 0000000..2bbd472 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/boardconfig/service/impl/MngrBoardconfigMapper.java @@ -0,0 +1,82 @@ +/* + * Copyright 2011 MOPAS(Ministry of Public Mngristration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.boardconfig.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigSearchVO; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +/** + * boardconfig에 관한 데이터처리 매퍼 클래스 + * + * @author 표준프레임워크센터 + * @since 2014.01.24 + * @version 1.0 + * @see
    + *  == 개정이력(Modification Information) ==
    + *
    + *          수정일          수정자           수정내용
    + *  ----------------    ------------    ---------------------------
    + *   2014.01.24        표준프레임워크센터          최초 생성
    + *
    + * 
    + */ +@Mapper("mngrBoardconfigMapper") +public interface MngrBoardconfigMapper { + + + + /** + * 글 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List mngrBoardconfigList(MngrBoardconfigSearchVO searchVO) throws SQLException; + + /** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrBoardconfigListTotCnt(MngrBoardconfigSearchVO searchVO) throws SQLException; + + void mngrBoardconfigRegistProc(MngrBoardconfigVO boardconfigVO) throws SQLException; + + MngrBoardconfigVO mngrBoardconfigView(MngrBoardconfigSearchVO searchVO) throws SQLException; + + void mngrBoardconfigUpdateProc(MngrBoardconfigVO boardconfigVO) throws SQLException; + + void mngrBoardconfigDelProc(MngrBoardconfigVO boardconfigVO)throws SQLException; + + void mngrBoardconfigChkDelProc(MngrBoardconfigVO boardconfigVO)throws SQLException; + + int mngrBoardconfigCheckId(MngrBoardconfigSearchVO mngrBoardconfigSearchVO)throws SQLException; + + void mngrBoardconfigInitPass(MngrBoardconfigVO boardconfigVO)throws SQLException; + + void increaseMngPassTryCnt(MngrBoardconfigVO boardconfigVO)throws SQLException; + + List mngrBoardconfigListAjax(MngrBoardconfigSearchVO mngrBoardconfigSearchVO)throws SQLException; + + List searchAllBoardConfig(MngrBoardconfigSearchVO searchVO); + + MngrBoardconfigVO mngrGetBoardConfigByMenuCode(String menuCode) throws SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/boardconfig/service/impl/MngrBoardconfigServiceImpl.java b/src/main/java/egovframework/itgcms/core/boardconfig/service/impl/MngrBoardconfigServiceImpl.java new file mode 100644 index 0000000..bf9fb42 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/boardconfig/service/impl/MngrBoardconfigServiceImpl.java @@ -0,0 +1,187 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.boardconfig.service.impl; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import egovframework.com.ext.jfile.service.JFileService; +import egovframework.itgcms.core.board.service.BoardVO; +import egovframework.itgcms.core.board.service.impl.BoardMapper; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigSearchVO; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigService; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigVO; +import egovframework.itgcms.core.code.service.MngrCodeVO; +import egovframework.itgcms.core.code.service.impl.MngrCodeMapper; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * @파일명 : BoardconfigServiceImpl.java + * @파일정보 : 게시판관리 서비스 구현 클래스 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Service("mngrBoardconfigService") +public class MngrBoardconfigServiceImpl extends EgovAbstractServiceImpl implements MngrBoardconfigService { + + private static final Logger LOGGER = LoggerFactory.getLogger(MngrBoardconfigServiceImpl.class); + + /** BoardconfigDAO */ + // ibatis 사용 + /*@Resource(name="BoardconfigDAO") + private BoardconfigDAO boardconfigDAO;*/ + // mybatis 사용 + @Resource(name="mngrBoardconfigMapper") + private MngrBoardconfigMapper mngrBoardconfigMapper; + + @Resource(name="mngrCodeMapper") + private MngrCodeMapper mngrCodeMapper; + + @Resource(name="boardMapper") + private BoardMapper boardMapper; + + @Autowired + private JFileService service; + + /** + * 글 목록을 조회한다. + * @param mngrBoardconfigSearchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + public List mngrBoardconfigList(MngrBoardconfigSearchVO mngrBoardconfigSearchVO) throws IOException, SQLException { + return mngrBoardconfigMapper.mngrBoardconfigList(mngrBoardconfigSearchVO); + } + + /** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + public int mngrBoardconfigListTotCnt(MngrBoardconfigSearchVO mngrBoardconfigSearchVO) throws IOException, SQLException { + return mngrBoardconfigMapper.mngrBoardconfigListTotCnt(mngrBoardconfigSearchVO); + } + + + public void mngrBoardconfigRegistProc(MngrBoardconfigVO mngrBoardconfigVO) throws IOException, SQLException { + mngrBoardconfigMapper.mngrBoardconfigRegistProc(mngrBoardconfigVO); + } + + /** + * 글을 조회한다. + * @param mngrBoardconfigSearchVO - 조회할 정보가 담긴 searchVO + * @return 조회 결과 + * @exception Exception + */ + public MngrBoardconfigVO mngrBoardconfigView(MngrBoardconfigSearchVO mngrBoardconfigSearchVO) throws IOException, SQLException { + MngrBoardconfigVO resultVO = mngrBoardconfigMapper.mngrBoardconfigView(mngrBoardconfigSearchVO); + return resultVO; + } + + public void mngrBoardconfigUpdateProc(MngrBoardconfigVO mngrBoardconfigVO) throws IOException, SQLException { + mngrBoardconfigMapper.mngrBoardconfigUpdateProc(mngrBoardconfigVO); + /** 게시판명이 수정되면 코드관리의 게시판명도 수정함 */ + MngrCodeVO mngrCodeVO = new MngrCodeVO(); + mngrCodeVO.setSchCode("_" + mngrBoardconfigVO.getId()); + mngrCodeVO.setCname(mngrBoardconfigVO.getBcName()); + mngrCodeVO.setUpdmemid(mngrBoardconfigVO.getUpdmemid()); + mngrCodeMapper.mngrCodeUpdate(mngrCodeVO); + } + + public void mngrBoardconfigDelProc(MngrBoardconfigVO mngrBoardconfigVO) throws IOException, SQLException { + + mngrBoardconfigMapper.mngrBoardconfigDelProc(mngrBoardconfigVO); + + /** 1.게시판 삭제되면 자동 생성됐던 코드관리의 코드들도 삭제처리 */ + MngrCodeVO mngrCodeVO = new MngrCodeVO(); + mngrCodeVO.setSchCode("_"+mngrBoardconfigVO.getId()); + mngrCodeVO.setDelmemid(mngrBoardconfigVO.getDelmemid()); + mngrCodeMapper.mngrCodeDeleteSubCodes(mngrCodeVO); + + /** 2.게시판 관련 게시글도 삭제처리 */ + boardMapper.boardAutoDeleteProc(mngrBoardconfigVO); //게시글삭제처리 + + /** 3.게시글에 첨부된 파일도 삭제처리 */ + List resultList = boardMapper.boardListAll(mngrBoardconfigVO);//게시글 아이디 리스트 + for(int i=0; i < resultList.size();i++){ + BoardVO tmpBoardVO = resultList.get(i); //삭제할 게시글 정보. + tmpBoardVO.setDelmemid(mngrBoardconfigVO.getDelmemid()); + // 파일 삭제처리 + if(tmpBoardVO != null && !"".equals(CommUtil.isNull(tmpBoardVO.getFileId(), ""))){ + service.updateAttachFileDeleteYnByFileId(tmpBoardVO.getFileId(), "Y"); //jfile 삭제여부 Y처리해도 목록 조회가 가능함(게시물이 삭제처리되서 나올일은 없음) + } + } + } + + public void mngrBoardconfigChkDelProc(MngrBoardconfigVO mngrBoardconfigVO) throws IOException, SQLException { + + /** 1.게시판 삭제되면 자동 생성됐던 코드관리의 코드들도 삭제처리 */ + String[] chkId = mngrBoardconfigVO.getChkId(); + for(int i = 0; i < chkId.length; i++){ + MngrCodeVO mngrCodeVO = new MngrCodeVO(); + mngrCodeVO.setSchCode("_" + chkId[i]); + mngrCodeVO.setDelmemid(mngrBoardconfigVO.getDelmemid()); + mngrCodeMapper.mngrCodeDeleteSubCodes(mngrCodeVO); + } + + /** 2.게시판 삭제처리 */ + mngrBoardconfigMapper.mngrBoardconfigChkDelProc(mngrBoardconfigVO); + + /** 3.게시판 관련 게시글에 첨부된 파일도 삭제처리 */ + List resultList = boardMapper.chkBoardListAll(mngrBoardconfigVO);//게시글 아이디 리스트 + for(int i=0; i < resultList.size();i++){ + BoardVO tmpBoardVO = resultList.get(i); //삭제할 게시글 정보. + tmpBoardVO.setDelmemid(mngrBoardconfigVO.getDelmemid()); + // 파일 삭제처리 + if(tmpBoardVO != null && !"".equals(CommUtil.isNull(tmpBoardVO.getFileId(), ""))){ + service.updateAttachFileDeleteYnByFileId(tmpBoardVO.getFileId(), "Y"); //jfile 삭제여부 Y처리해도 목록 조회가 가능함(게시물이 삭제처리되서 나올일은 없음) + } + } + + /** 4.게시글도 삭제처리 */ + boardMapper.boardChkAutoDeleteProc(mngrBoardconfigVO); //게시글삭제처리 + + + } + + public int mngrBoardconfigCheckId(MngrBoardconfigSearchVO mngrBoardconfigSearchVO) + throws IOException, SQLException { + return mngrBoardconfigMapper.mngrBoardconfigCheckId(mngrBoardconfigSearchVO); + } + + + public List mngrBoardconfigListAjax(MngrBoardconfigSearchVO mngrBoardconfigSearchVO) throws IOException, SQLException { + return mngrBoardconfigMapper.mngrBoardconfigListAjax(mngrBoardconfigSearchVO); + } + +} diff --git a/src/main/java/egovframework/itgcms/core/code/service/MngrCodeSearchVO.java b/src/main/java/egovframework/itgcms/core/code/service/MngrCodeSearchVO.java new file mode 100644 index 0000000..9af0f21 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/code/service/MngrCodeSearchVO.java @@ -0,0 +1,36 @@ +package egovframework.itgcms.core.code.service; + +import java.io.Serializable; + +import egovframework.itgcms.common.DefaultVO;; + +public class MngrCodeSearchVO implements Serializable { + /** + * + */ + private static final long serialVersionUID = -6410601333568013368L; + + private String schCode = ""; + private String act = ""; + private String useType = ""; //목록 쿼리시 게시판 카테고리와 코드와 분기하기 위해서 + + public void setSchCode(String schCode){ + this.schCode = schCode; + } + public String getSchCode(){ + return this.schCode; + } + public String getAct() { + return act; + } + public void setAct(String act) { + this.act = act; + } + public String getUseType() { + return useType; + } + public void setUseType(String useType) { + this.useType = useType; + } + +} diff --git a/src/main/java/egovframework/itgcms/core/code/service/MngrCodeService.java b/src/main/java/egovframework/itgcms/core/code/service/MngrCodeService.java new file mode 100644 index 0000000..099a0e1 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/code/service/MngrCodeService.java @@ -0,0 +1,59 @@ +package egovframework.itgcms.core.code.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +public interface MngrCodeService { + + + /** + * 코드 목록 + * @param mngrCodeVO + * @return + * @throws IOException, SQLException + */ + List mngrCodeList(MngrCodeVO mngrCodeVO) throws IOException, SQLException; + + /** + * 코드 정보 + * @param mngrCodeVO + * @return + * @throws IOException, SQLException + */ + MngrCodeVO mngrCodeRegistAjax(MngrCodeVO mngrCodeVO) throws IOException, SQLException; + + + + int mngrCodeDupleCheck(MngrCodeVO mngrCodeVO) throws IOException, SQLException; + + + + /** + * 코드 등록 + * @param mngrCodeVO + * @throws IOException, SQLException + */ + void insertCode(MngrCodeVO mngrCodeVO) throws IOException, SQLException; + + + /** + * 코드 수정 + * @param mngrCodeVO + * @throws IOException, SQLException + */ + void mngrCodeUpdate(MngrCodeVO mngrCodeVO) throws IOException, SQLException; + + int mngrCodeChngDefaultAjax(MngrCodeVO mngrCodeVO)throws IOException, SQLException; + + void mngrCodeRegistDeleteAjax(MngrCodeVO mngrCodeVO)throws IOException, SQLException; + + String mngrCodeSwap(MngrCodeVO mngrCodeVO)throws IOException, SQLException; + + MngrCodeVO mngrCodeMaxCode(MngrCodeVO mngrCodeVO)throws IOException, SQLException; + + + + + +} diff --git a/src/main/java/egovframework/itgcms/core/code/service/MngrCodeVO.java b/src/main/java/egovframework/itgcms/core/code/service/MngrCodeVO.java new file mode 100644 index 0000000..cf20f0d --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/code/service/MngrCodeVO.java @@ -0,0 +1,159 @@ +package egovframework.itgcms.core.code.service; + +import java.util.ArrayList; +import java.util.List; + +public class MngrCodeVO extends MngrCodeSearchVO{ + + private static final long serialVersionUID = 5974286788384879335L; + + private String ccode; //코드 + private String cname; // 코드명 + private String cpcode; // 부모코드 + private String cdepth; // 뎁스 + private String corder; //순서 + private String cauth = "00"; //코드권한 + private String etc1 ; //기타1 + private String etc2 ; //기타2 + private String regdt; //등록일 + private String upddt; //수정일 + private String deldt; //삭제일 + private String regmemid; //등록자아이디 + private String updmemid; //수정자아이디 + private String delmemid; //삭제자아이디 + private String defaultyn; //기본생성코드여부 + private String delyn; //삭제여부 + private int subtree; //서버코드 존재여부 + private String pcodename; //부모코드의 이름 + private String swaptype; //순서변경 타입 UP|DOWN + private List childCodeList = null; + + public String getCcode() { + return ccode; + } + public void setCcode(String ccode) { + this.ccode = ccode; + } + public String getCname() { + return cname; + } + public void setCname(String cname) { + this.cname = cname; + } + public String getCpcode() { + return cpcode; + } + public void setCpcode(String cpcode) { + this.cpcode = cpcode; + } + public String getCdepth() { + return cdepth; + } + public void setCdepth(String cdepth) { + this.cdepth = cdepth; + } + public String getCorder() { + return corder; + } + public void setCorder(String corder) { + this.corder = corder; + } + public String getCauth() { + return cauth; + } + public void setCauth(String cauth) { + this.cauth = cauth; + } + public String getEtc1() { + return etc1; + } + public void setEtc1(String etc1) { + this.etc1 = etc1; + } + public String getEtc2() { + return etc2; + } + public void setEtc2(String etc2) { + this.etc2 = etc2; + } + public String getRegdt() { + return regdt; + } + public void setRegdt(String regdt) { + this.regdt = regdt; + } + public String getUpddt() { + return upddt; + } + public void setUpddt(String upddt) { + this.upddt = upddt; + } + public String getDeldt() { + return deldt; + } + public void setDeldt(String deldt) { + this.deldt = deldt; + } + public String getRegmemid() { + return regmemid; + } + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + public String getUpdmemid() { + return updmemid; + } + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + public String getDelmemid() { + return delmemid; + } + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + public String getDefaultyn() { + return defaultyn; + } + public void setDefaultyn(String defaultyn) { + this.defaultyn = defaultyn; + } + public String getDelyn() { + return delyn; + } + public void setDelyn(String delyn) { + this.delyn = delyn; + } + public int getSubtree() { + return subtree; + } + public void setSubtree(int subtree) { + this.subtree = subtree; + } + public String getPcodename() { + return pcodename; + } + public void setPcodename(String pcodename) { + this.pcodename = pcodename; + } + public String getSwaptype() { + return swaptype; + } + public void setSwaptype(String swaptype) { + this.swaptype = swaptype; + } + public void setChildCodeList(List childCodeList) { + this.childCodeList = new ArrayList(); + this.childCodeList.addAll(childCodeList); + } + public List getChildCodeList() { + if (childCodeList != null) { + ArrayList arrRet = new ArrayList(); + arrRet.addAll(childCodeList); + return arrRet; + }else{ + return null; + } + } + +} diff --git a/src/main/java/egovframework/itgcms/core/code/service/impl/MngrCodeMapper.java b/src/main/java/egovframework/itgcms/core/code/service/impl/MngrCodeMapper.java new file mode 100644 index 0000000..c505dfd --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/code/service/impl/MngrCodeMapper.java @@ -0,0 +1,36 @@ +package egovframework.itgcms.core.code.service.impl; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import egovframework.itgcms.core.code.service.MngrCodeVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + + +@Mapper("mngrCodeMapper") +public interface MngrCodeMapper { + + List mngrCodeList(MngrCodeVO mngrCodeVO) throws SQLException ; + + MngrCodeVO mngrCodeRegistAjax(MngrCodeVO mngrCodeVO) throws SQLException ; + + int mngrCodeDupleCheck(MngrCodeVO mngrCodeVO) throws SQLException ; + + void insertCode(MngrCodeVO mngrCodeVO) throws SQLException ; + + void mngrCodeUpdate(MngrCodeVO mngrCodeVO) throws SQLException ; + + int mngrCodeChngDefaultAjax(MngrCodeVO mngrCodeVO) throws SQLException; + + void mngrCodeRegistDeleteAjax(MngrCodeVO mngrCodeVO) throws SQLException; + + MngrCodeVO mngrCodeSwapTarget(MngrCodeVO mngrCodeVO) throws SQLException; + + void mngrCodeSwap(HashMap hmParam) throws SQLException; + + MngrCodeVO mngrCodeMaxCode(MngrCodeVO mngrCodeVO) throws SQLException; + + void mngrCodeDeleteSubCodes(MngrCodeVO mngrCodeVO)throws SQLException; + +} diff --git a/src/main/java/egovframework/itgcms/core/code/service/impl/MngrCodeServiceImpl.java b/src/main/java/egovframework/itgcms/core/code/service/impl/MngrCodeServiceImpl.java new file mode 100644 index 0000000..90d8ff7 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/code/service/impl/MngrCodeServiceImpl.java @@ -0,0 +1,97 @@ +/** + * @Class Name : MngrCodeServiceImpl.java + * @Description : 관리자 코드관리 구현 클래스 + * 수정일 수정자 수정내용 + * ------------------------------------------------------------- + * 2013. 6. 4. woonee 최초 생성 + * + */ +package egovframework.itgcms.core.code.service.impl; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.itgcms.core.code.service.MngrCodeService; +import egovframework.itgcms.core.code.service.MngrCodeVO; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + + + +@Service("mngrCodeService") +public class MngrCodeServiceImpl extends EgovAbstractServiceImpl implements MngrCodeService { + + @Resource(name="mngrCodeMapper") + private MngrCodeMapper mngrCodeMapper; + + public List mngrCodeList(MngrCodeVO mngrCodeVO) throws IOException, SQLException { + return mngrCodeMapper.mngrCodeList(mngrCodeVO); + } + + @Override + public MngrCodeVO mngrCodeRegistAjax(MngrCodeVO mngrCodeVO) throws IOException, SQLException { + return mngrCodeMapper.mngrCodeRegistAjax(mngrCodeVO); + } + + + @Override + public int mngrCodeDupleCheck(MngrCodeVO mngrCodeVO) throws IOException, SQLException { + return mngrCodeMapper.mngrCodeDupleCheck(mngrCodeVO); + } + + + + public void insertCode(MngrCodeVO mngrCodeVO) throws IOException, SQLException { + mngrCodeMapper.insertCode(mngrCodeVO); + } + + + + public void mngrCodeUpdate(MngrCodeVO mngrCodeVO) throws IOException, SQLException { + mngrCodeMapper.mngrCodeUpdate(mngrCodeVO); + } + + + + @Override + public int mngrCodeChngDefaultAjax(MngrCodeVO mngrCodeVO) throws IOException, SQLException { + return mngrCodeMapper.mngrCodeChngDefaultAjax(mngrCodeVO); + } + + @Override + public void mngrCodeRegistDeleteAjax(MngrCodeVO mngrCodeVO) + throws IOException, SQLException { + mngrCodeMapper.mngrCodeRegistDeleteAjax(mngrCodeVO); + } + + @Override + public String mngrCodeSwap(MngrCodeVO mngrCodeVO) throws IOException, SQLException { + MngrCodeVO target = mngrCodeMapper.mngrCodeSwapTarget(mngrCodeVO); + if(target == null){ + return "2"; // 첫번째, 마지막 위치 + } + MngrCodeVO source = mngrCodeMapper.mngrCodeRegistAjax(mngrCodeVO); + HashMap hmParam = new HashMap(); + /* 타겟의 오더순서를 소스의 오더순서로 설정*/ + hmParam.put("ccode", target.getCcode()); + hmParam.put("corder", source.getCorder()); + mngrCodeMapper.mngrCodeSwap(hmParam); + + /* 소스의 오더순서를 타겟의 오더순서로 설정*/ + hmParam.put("ccode", source.getCcode()); + hmParam.put("corder", target.getCorder()); + mngrCodeMapper.mngrCodeSwap(hmParam); + return "1"; + } + + @Override + public MngrCodeVO mngrCodeMaxCode(MngrCodeVO mngrCodeVO) throws IOException, SQLException { + return mngrCodeMapper.mngrCodeMaxCode(mngrCodeVO); + } + +} diff --git a/src/main/java/egovframework/itgcms/core/comment/service/CommentService.java b/src/main/java/egovframework/itgcms/core/comment/service/CommentService.java new file mode 100644 index 0000000..a0a8656 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/comment/service/CommentService.java @@ -0,0 +1,22 @@ +package egovframework.itgcms.core.comment.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +public interface CommentService { + + List commentListByBdIdx(CommentVO searchVo) throws IOException, SQLException; + + int countCommentTotalCount(int bdIdx) throws IOException, SQLException; + + int registComment(CommentVO searchVo) throws IOException, SQLException; + + int registReComment(CommentVO searchVo) throws IOException, SQLException; + + int modifyComment(CommentVO serachVo) throws IOException, SQLException; + + int deleteComment(CommentVO serachVo) throws IOException, SQLException; + + int countReComment(int cIdx) throws IOException, SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/comment/service/CommentVO.java b/src/main/java/egovframework/itgcms/core/comment/service/CommentVO.java new file mode 100644 index 0000000..1706776 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/comment/service/CommentVO.java @@ -0,0 +1,180 @@ +package egovframework.itgcms.core.comment.service; + +import java.util.Date; + +import egovframework.itgcms.common.DefaultVO; + +public class CommentVO extends DefaultVO{ + + private int cIdx = 0; + private String cWriter = ""; + private String cContents = ""; + private String regMemId =""; + private Date regDt = null; + private String updMemId = ""; + private Date updDt = null; + private String delyn = "N"; + private String delMemId = ""; + private Date delDt = null; + + private int bdIdx = 0; + private int cReIdx = 0; + private String cReComId = ""; + + + private String cReComName = ""; + + private int parent; + + + public int getCIdx() { + return cIdx; + } + + + public void setCIdx(int cIdx) { + this.cIdx = cIdx; + } + + + public String getcWriter() { + return cWriter; + } + + + public void setcWriter(String cWriter) { + this.cWriter = cWriter; + } + + + public String getcContents() { + return cContents; + } + + + public void setcContents(String cContents) { + this.cContents = cContents; + } + + + public String getRegMemId() { + return regMemId; + } + + + public void setRegMemId(String regMemId) { + this.regMemId = regMemId; + } + + + public Date getRegDt() { + return regDt; + } + + + public void setRegDt(Date regDt) { + this.regDt = regDt; + } + + + public String getUpdMemId() { + return updMemId; + } + + + public void setUpdMemId(String updMemId) { + this.updMemId = updMemId; + } + + + public Date getUpdDt() { + return updDt; + } + + + public void setUpdDt(Date updDt) { + this.updDt = updDt; + } + + + public String getDelyn() { + return delyn; + } + + + public void setDelyn(String delyn) { + this.delyn = delyn; + } + + + public String getDelMemId() { + return delMemId; + } + + + public void setDelMemId(String delMemId) { + this.delMemId = delMemId; + } + + + public Date getDelDt() { + return delDt; + } + + + public void setDelDt(Date delDt) { + this.delDt = delDt; + } + + + public int getBdIdx() { + return bdIdx; + } + + + public void setBdIdx(int bdIdx) { + this.bdIdx = bdIdx; + } + + + public int getcReIdx() { + return cReIdx; + } + + + public void setcReIdx(int cReIdx) { + this.cReIdx = cReIdx; + } + + + public String getcReComId() { + return cReComId; + } + + + public void setcReComId(String cReComId) { + this.cReComId = cReComId; + } + + + public String getcReComName() { + return cReComName; + } + + + public void setcReComName(String cReComName) { + this.cReComName = cReComName; + } + + public void setParent(int parent) { + this.parent = parent; + } + public int isParent() { + return parent; + } + + @Override + public int getPageUnit(){ + return 20; + } +} diff --git a/src/main/java/egovframework/itgcms/core/comment/service/impl/CommentMapper.java b/src/main/java/egovframework/itgcms/core/comment/service/impl/CommentMapper.java new file mode 100644 index 0000000..f917723 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/comment/service/impl/CommentMapper.java @@ -0,0 +1,26 @@ +package egovframework.itgcms.core.comment.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.itgcms.core.comment.service.CommentVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +@Mapper("commentMapper") +public interface CommentMapper { + + List commentListByBdIdx(CommentVO searchVo) throws SQLException; + + int countCommentTotalCount(int bdIdx) throws SQLException; + + int registComment(CommentVO searchVo) throws SQLException; + + int registReComment(CommentVO searchVo) throws SQLException; + + int modifyComment(CommentVO serachVo) throws SQLException; + + int deleteComment(CommentVO serachVo) throws SQLException; + + int countReComment(int cIdx) throws SQLException; + +} diff --git a/src/main/java/egovframework/itgcms/core/comment/service/impl/CommentServiceImpl.java b/src/main/java/egovframework/itgcms/core/comment/service/impl/CommentServiceImpl.java new file mode 100644 index 0000000..8f65c5e --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/comment/service/impl/CommentServiceImpl.java @@ -0,0 +1,65 @@ +package egovframework.itgcms.core.comment.service.impl; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.itgcms.core.comment.service.CommentService; +import egovframework.itgcms.core.comment.service.CommentVO; + + +@Service("commentService") +public class CommentServiceImpl implements CommentService { + + @Resource(name="commentMapper") + private CommentMapper commentMapper; + + @Override + public List commentListByBdIdx(CommentVO searchVo) throws IOException, SQLException{ + return commentMapper.commentListByBdIdx(searchVo); + } + + @Override + public int countCommentTotalCount(int bdIdx) throws IOException, SQLException { + return commentMapper.countCommentTotalCount(bdIdx); + } + + @Override + public int registComment(CommentVO searchVo) throws IOException, SQLException { + return commentMapper.registComment(searchVo); + } + + + @Override + public int registReComment(CommentVO searchVo) throws IOException, SQLException { + return commentMapper.registReComment(searchVo); + } + + @Override + public int modifyComment(CommentVO serachVo) throws IOException, SQLException { + return commentMapper.modifyComment(serachVo); + } + + @Override + public int deleteComment(CommentVO serachVo) throws IOException, SQLException { + + int num = commentMapper.countCommentTotalCount(serachVo.getCIdx()); + + if (num > 1) { + return 0; + } else { + return commentMapper.deleteComment(serachVo); + } + } + + @Override + public int countReComment(int cIdx) throws IOException, SQLException { + return commentMapper.countReComment(cIdx); + } + + +} diff --git a/src/main/java/egovframework/itgcms/core/group/service/MngrGroupSearchVO.java b/src/main/java/egovframework/itgcms/core/group/service/MngrGroupSearchVO.java new file mode 100644 index 0000000..b7e14b6 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/group/service/MngrGroupSearchVO.java @@ -0,0 +1,40 @@ +package egovframework.itgcms.core.group.service; + +import java.io.UnsupportedEncodingException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO;; + +public class MngrGroupSearchVO extends DefaultVO { + /** + * + */ + private static final long serialVersionUID = 5358593433818756365L; + private static final Logger logger = LogManager.getLogger(MngrGroupSearchVO.class); + + /** 관리자 아이디 */ + String id = ""; //검색조건 유지 + + String query = ""; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + + public String getQuery() { + String query = super.queryString(); + try{ + query += "&id=" + java.net.URLEncoder.encode(this.id, "UTF-8"); + }catch(UnsupportedEncodingException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/group/service/MngrGroupService.java b/src/main/java/egovframework/itgcms/core/group/service/MngrGroupService.java new file mode 100644 index 0000000..8e31622 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/group/service/MngrGroupService.java @@ -0,0 +1,93 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.group.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +/** + * @파일명 : MngrGroupService.java + * @파일정보 : 부서 관리 서비스 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface MngrGroupService { + + /** + * 글 목록을 조회한다. + * @param mngrGroupSearchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List mngrGroupList(MngrGroupSearchVO mngrGroupSearchVO) throws IOException, SQLException; + + /** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrGroupListTotCnt(MngrGroupSearchVO mngrGroupSearchVO) throws IOException, SQLException; + + /** + * 등록 저장 처리 + * @param mngrGroupVO + * @throws IOException, SQLException + */ + void mngrGroupRegistProc(MngrGroupVO mngrGroupVO) throws IOException, SQLException; + + /** + * 조회 + * @param mngrGroupSearchVO + * @return + * @throws IOException, SQLException + */ + MngrGroupVO mngrGroupView(MngrGroupSearchVO mngrGroupSearchVO) throws IOException, SQLException; + + /** + * 수정 처리 + * @param mngrGroupVO + * @throws IOException, SQLException + */ + void mngrGroupUpdateProc(MngrGroupVO mngrGroupVO) throws IOException, SQLException; + + /** + * 삭제 처리 + * @param mngrGroupVO + * @throws IOException, SQLException + */ + void mngrGroupDelProc(MngrGroupVO mngrGroupVO)throws IOException, SQLException; + + /** + * 게시판 목록 Ajax + * @param mngrGroupSearchVO + * @return + * @throws IOException, SQLException + */ + List mngrGroupListAjax(MngrGroupSearchVO mngrGroupSearchVO)throws IOException, SQLException; + + + + + +} diff --git a/src/main/java/egovframework/itgcms/core/group/service/MngrGroupVO.java b/src/main/java/egovframework/itgcms/core/group/service/MngrGroupVO.java new file mode 100644 index 0000000..3fb50f4 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/group/service/MngrGroupVO.java @@ -0,0 +1,58 @@ +package egovframework.itgcms.core.group.service; + + +public class MngrGroupVO extends MngrGroupSearchVO{ + private static final long serialVersionUID = 3650540623057406361L; + String groupCode = ""; + String groupName = ""; + String groupPcode = ""; + String groupDepth = ""; + String groupOrder = ""; + String groupTel = ""; + String groupMemo = ""; + + public String getGroupCode() { + return groupCode; + } + public void setGroupCode(String groupCode) { + this.groupCode = groupCode; + } + public String getGroupName() { + return groupName; + } + public void setGroupName(String groupName) { + this.groupName = groupName; + } + public String getGroupPcode() { + return groupPcode; + } + public void setGroupPcode(String groupPcode) { + this.groupPcode = groupPcode; + } + public String getGroupDepth() { + return groupDepth; + } + public void setGroupDepth(String groupDepth) { + this.groupDepth = groupDepth; + } + public String getGroupOrder() { + return groupOrder; + } + public void setGroupOrder(String groupOrder) { + this.groupOrder = groupOrder; + } + public String getGroupTel() { + return groupTel; + } + public void setGroupTel(String groupTel) { + this.groupTel = groupTel; + } + public String getGroupMemo() { + return groupMemo; + } + public void setGroupMemo(String groupMemo) { + this.groupMemo = groupMemo; + } + + +} diff --git a/src/main/java/egovframework/itgcms/core/group/service/impl/MngrGroupMapper.java b/src/main/java/egovframework/itgcms/core/group/service/impl/MngrGroupMapper.java new file mode 100644 index 0000000..8bf22ed --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/group/service/impl/MngrGroupMapper.java @@ -0,0 +1,70 @@ +/* + * Copyright 2011 MOPAS(Ministry of Public Mngristration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.group.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.itgcms.core.group.service.MngrGroupSearchVO; +import egovframework.itgcms.core.group.service.MngrGroupVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +/** + * group에 관한 데이터처리 매퍼 클래스 + * + * @author 표준프레임워크센터 + * @since 2014.01.24 + * @version 1.0 + * @see
    + *  == 개정이력(Modification Information) ==
    + *
    + *          수정일          수정자           수정내용
    + *  ----------------    ------------    ---------------------------
    + *   2014.01.24        표준프레임워크센터          최초 생성
    + *
    + * 
    + */ +@Mapper("mngrGroupMapper") +public interface MngrGroupMapper { + + + + /** + * 글 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List mngrGroupList(MngrGroupSearchVO searchVO) throws SQLException; + + /** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrGroupListTotCnt(MngrGroupSearchVO searchVO) throws SQLException; + + void mngrGroupRegistProc(MngrGroupVO groupVO) throws SQLException; + + MngrGroupVO mngrGroupView(MngrGroupSearchVO searchVO) throws SQLException; + + void mngrGroupUpdateProc(MngrGroupVO groupVO) throws SQLException; + + void mngrGroupDelProc(MngrGroupVO groupVO)throws SQLException; + + List mngrGroupListAjax(MngrGroupSearchVO mngrGroupSearchVO)throws SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/group/service/impl/MngrGroupServiceImpl.java b/src/main/java/egovframework/itgcms/core/group/service/impl/MngrGroupServiceImpl.java new file mode 100644 index 0000000..2105ca8 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/group/service/impl/MngrGroupServiceImpl.java @@ -0,0 +1,107 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.group.service.impl; + +import java.io.IOException; +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.itgcms.core.group.service.MngrGroupSearchVO; +import egovframework.itgcms.core.group.service.MngrGroupService; +import egovframework.itgcms.core.group.service.MngrGroupVO; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * @파일명 : GroupServiceImpl.java + * @파일정보 : 부서관리 서비스 구현 클래스 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Service("mngrGroupService") +public class MngrGroupServiceImpl extends EgovAbstractServiceImpl implements MngrGroupService { + + private static final Logger LOGGER = LoggerFactory.getLogger(MngrGroupServiceImpl.class); + + /** GroupDAO */ + // ibatis 사용 + /*@Resource(name="GroupDAO") + private GroupDAO groupDAO;*/ + // mybatis 사용 + @Resource(name="mngrGroupMapper") + private MngrGroupMapper mngrGroupMapper; + + /** + * 글 목록을 조회한다. + * @param mngrGroupSearchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + public List mngrGroupList(MngrGroupSearchVO mngrGroupSearchVO) throws IOException, SQLException { + return mngrGroupMapper.mngrGroupList(mngrGroupSearchVO); + } + + /** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + public int mngrGroupListTotCnt(MngrGroupSearchVO mngrGroupSearchVO) throws IOException, SQLException { + return mngrGroupMapper.mngrGroupListTotCnt(mngrGroupSearchVO); + } + + + public void mngrGroupRegistProc(MngrGroupVO mngrGroupVO) throws IOException, SQLException { + mngrGroupMapper.mngrGroupRegistProc(mngrGroupVO); + } + + /** + * 글을 조회한다. + * @param mngrGroupSearchVO - 조회할 정보가 담긴 searchVO + * @return 조회 결과 + * @exception Exception + */ + public MngrGroupVO mngrGroupView(MngrGroupSearchVO mngrGroupSearchVO) throws IOException, SQLException { + MngrGroupVO resultVO = mngrGroupMapper.mngrGroupView(mngrGroupSearchVO); + return resultVO; + } + + public void mngrGroupUpdateProc(MngrGroupVO mngrGroupVO) throws IOException, SQLException { + mngrGroupMapper.mngrGroupUpdateProc(mngrGroupVO); + } + + public void mngrGroupDelProc(MngrGroupVO mngrGroupVO) throws IOException, SQLException { + mngrGroupMapper.mngrGroupDelProc(mngrGroupVO); + } + + public List mngrGroupListAjax(MngrGroupSearchVO mngrGroupSearchVO) throws IOException, SQLException { + return mngrGroupMapper.mngrGroupListAjax(mngrGroupSearchVO); + } + +} diff --git a/src/main/java/egovframework/itgcms/core/joinformconfig/service/MngrContractSearchVO.java b/src/main/java/egovframework/itgcms/core/joinformconfig/service/MngrContractSearchVO.java new file mode 100644 index 0000000..1bffea8 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/joinformconfig/service/MngrContractSearchVO.java @@ -0,0 +1,115 @@ +package egovframework.itgcms.core.joinformconfig.service; + +import java.util.Date; + +import egovframework.itgcms.common.DefaultVO; + +public class MngrContractSearchVO extends DefaultVO { + + /** + * + */ + private static final long serialVersionUID = 1L; + + private int no = 0; + private String title = ""; + private String contents = ""; + private boolean required = true; + private String regMemId = ""; + private String updMemId = ""; + private String delMemId = ""; + private Date regDt = null; + private Date updDt = null; + private Date delDt = null; + private char delyn = 'N'; + private String query = ""; + + private String[] nos; + + public int getNo() { + return no; + } + public void setNo(int no) { + this.no = no; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getContents() { + return contents; + } + public void setContents(String contents) { + this.contents = contents; + } + public boolean getRequired() { + return required; + } + public void setRequired(boolean isRequired) { + this.required = isRequired; + } + public String getRegMemId() { + return regMemId; + } + public void setRegMemId(String regMemeId) { + this.regMemId = regMemeId; + } + public String getUpdMemId() { + return updMemId; + } + public void setUpdMemId(String updMemId) { + this.updMemId = updMemId; + } + public String getDelMemId() { + return delMemId; + } + public void setDelMemId(String delMemId) { + this.delMemId = delMemId; + } + public Date getRegDt() { + return regDt; + } + public void setRegDt(Date regDt) { + this.regDt = regDt; + } + public Date getUpdDt() { + return updDt; + } + public void setUpdDt(Date updDt) { + this.updDt = updDt; + } + public Date getDelDt() { + return delDt; + } + public void setDelDt(Date delDt) { + this.delDt = delDt; + } + public void setDelyn(char delyn) { + this.delyn = delyn; + } + public char getDelyn() { + return delyn; + } + public void setQuery() { + this.query = super.queryString(); + } + public String getQuery() { + return super.queryString()+"&no="+String.valueOf(no); + } + public void setNos(String[] nos) { + this.nos = new String[nos.length]; + for(int i = 0; i < nos.length; ++i) this.nos[i] = nos[i]; + } + public String[] getNos() { + String[] ret = null; + if (this.nos != null) { + ret = new String[nos.length]; + for (int i = 0; i < nos.length; i++) { + ret[i] = this.nos[i]; + } + } + return ret; + } +} diff --git a/src/main/java/egovframework/itgcms/core/joinformconfig/service/MngrContractService.java b/src/main/java/egovframework/itgcms/core/joinformconfig/service/MngrContractService.java new file mode 100644 index 0000000..833009e --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/joinformconfig/service/MngrContractService.java @@ -0,0 +1,83 @@ +package egovframework.itgcms.core.joinformconfig.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.util.EgovMap; + +/** + * @파일명 : MngrContractService.java + * @파일정보 : 약관 관리 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @최초생성 2015. 5.22. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface MngrContractService { + + /** + * @throws IOException, SQLException + * 회원 가입 약관을 등록한다 + * @param contractSearchVo - 등록할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrRegistContract(MngrContractSearchVO contractSearchVo) throws IOException, SQLException; + + /** + * 약관 목록을 조회한다 + * @param contractSearchVo - 등록할 정보가 담긴 VO + * @return 약관 목록 + * @exception + */ + ListmngrGetContractList(MngrContractSearchVO contractSearchVo) throws IOException, SQLException; + + ListmngrGetContractList() throws IOException, SQLException; + /** + * 약곤 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrContractTotCnt(MngrContractSearchVO searchVo) throws IOException, SQLException; + + /** + * 약관 정보을 조회한다 + * @param contractSearchVo - 등록할 정보가 담긴 VO + * @return 약관 정보 + * @exception + */ + MngrContractSearchVO mngrGetContractObj(MngrContractSearchVO searchVo) throws IOException, SQLException; + + /** + * @throws IOException, SQLException + * 약관 정보을 수정한다 + * @param contractSearchVo - 수정할 정보가 담긴 VO + * @return 약관 정보 + * @exception + */ + int mngrUpdateContract(MngrContractSearchVO contactSearchVo) throws IOException, SQLException; + + int mngrDeleteContract(MngrContractSearchVO contactSearchVo) throws IOException, SQLException; + int mngrDeleteContractList(MngrContractSearchVO contactSearchVo, String listDesc) throws IOException, SQLException; + + List mngrGetContractListByContractDesc(String[] contractDesc) throws IOException, SQLException; + + /** + * @throws IOException, SQLException + * 회원 가입 약관을 등록한다 + * @param contractSearchVo - 등록할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int setMenuContractInfo(EgovMap egovMap) throws IOException, SQLException; + + EgovMap getMenuContractInfo(EgovMap egovMap) throws IOException, SQLException; + + ListmngrGetContractListByContractDesc(EgovMap egovMap) throws IOException, SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/joinformconfig/service/MngrJoinFormConfigSearchVO.java b/src/main/java/egovframework/itgcms/core/joinformconfig/service/MngrJoinFormConfigSearchVO.java new file mode 100644 index 0000000..80ce90f --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/joinformconfig/service/MngrJoinFormConfigSearchVO.java @@ -0,0 +1,212 @@ +package egovframework.itgcms.core.joinformconfig.service; + +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO; + +public class MngrJoinFormConfigSearchVO extends DefaultVO { + + private static final Logger logger = LogManager.getLogger(MngrJoinFormConfigSearchVO.class); + /* + * t_formInfo AI 값 + */ + private int no = 0; + + /* + * 각 속성 값들 + * 0 : 사용하지 않음. + * 1 : 사용함 (필수 값) + * 2 : 사용함 (선택 값) + */ + private int name = 0; + private int nickName = 0; + private int passtrycnt = 0; + private int phone = 0; + private int mobile = 0; + private int email = 0; + private int fax = 0; + private int address = 0; + private int birth = 0; + private int sex = 0; + private int grp = 0; + + private String regMemId = ""; + private String updMemId = ""; + + private Date regDt = null; + private Date updDt = null; + + private String siteCode = ""; + private String contractDesc = ""; + private int cntContract = 0; + + private int useJoinwait = 0; + + private List contractList = null; + + private String query = ""; + + public int getNo() { + return no; + } + public void setNo(int no) { + this.no = no; + } + public int getName() { + return name; + } + public void setName(int name) { + this.name = name; + } + public int getNickName() { + return nickName; + } + public void setNickName(int nickName) { + this.nickName = nickName; + } + public int getPasstrycnt() { + return passtrycnt; + } + public void setPasstrycnt(int passtrycnt) { + this.passtrycnt = passtrycnt; + } + public int getPhone() { + return phone; + } + public void setPhone(int phone) { + this.phone = phone; + } + public int getMobile() { + return mobile; + } + public void setMobile(int mobile) { + this.mobile = mobile; + } + public int getEmail() { + return email; + } + public void setEmail(int email) { + this.email = email; + } + public int getFax() { + return fax; + } + public void setFax(int fax) { + this.fax = fax; + } + public int getAddress() { + return address; + } + public void setAddress(int address) { + this.address = address; + } + public int getBirth() { + return birth; + } + public void setBirth(int birth) { + this.birth = birth; + } + public int getSex() { + return sex; + } + public void setSex(int sex) { + this.sex = sex; + } + public void setGrp(int grp) { + this.grp = grp; + } + public int getGrp() { + return grp; + } + public String getRegMemId() { + return regMemId; + } + public void setRegMemId(String regMemId) { + this.regMemId = regMemId; + } + public String getUpdMemId() { + return updMemId; + } + public void setUpdMemId(String updMemId) { + this.updMemId = updMemId; + } + public Date getRegDt() { + return regDt; + } + public void setRegDt(Date regDt) { + this.regDt = regDt; + } + public Date getUpdDt() { + return updDt; + } + public void setUpdDt(Date updDt) { + this.updDt = updDt; + } + public void setSiteCode(String siteCode) { + this.siteCode = siteCode; + } + public String getSiteCode() { + return siteCode; + } + public void setContractDesc(String contractDesc) { + this.contractDesc = contractDesc; + if (!"".equals(contractDesc)) { + this.cntContract = contractDesc.split("/").length; + } + } + public String getContractDesc() { + return contractDesc; + } + public void setContractList(List contractList) { + if (contractList != null && contractList.size() > 0) { + this.contractList = new ArrayList<>(contractList); + this.cntContract = contractList.size(); + } + } + + public void setUseJoinwait(int useJoinwait) { + this.useJoinwait = useJoinwait; + } + + public int getUseJoinwait() { + return useJoinwait; + } + + public List getContractList() { + if (this.contractList != null) { + return new ArrayList<>(this.contractList); + } else { + return null; + } + } + public void setCntContract(String contractDesc) { + if (!"".equals(contractDesc)) { + this.cntContract = contractDesc.split("/").length; + } + } + public int getCntContract() { + if (cntContract==0 && !"".equals(contractDesc)) { + this.cntContract = contractDesc.split("/").length; + } + return cntContract; + } + + public void setQuery() { + this.query = super.queryString(); + } + public String getQuery() { + String query = super.queryString(); + try { + query += "&no=" + java.net.URLEncoder.encode(String.valueOf(this.no), "UTF-8"); + } catch (UnsupportedEncodingException e) { + logger.error("예외 상황 발생"); + }; + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/joinformconfig/service/MngrJoinFormConfigService.java b/src/main/java/egovframework/itgcms/core/joinformconfig/service/MngrJoinFormConfigService.java new file mode 100644 index 0000000..c4824e5 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/joinformconfig/service/MngrJoinFormConfigService.java @@ -0,0 +1,59 @@ +package egovframework.itgcms.core.joinformconfig.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +/** + * @파일명 : MngrJoinFormConfigService.java + * @파일정보 : 관리자관리 서비스 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @최초생성 2015. 5.16. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface MngrJoinFormConfigService { + + /** + * 설정 목록을 조회한다. + * @param mngrJoinFormSearchVO - 조회할 정보가 담긴 VO + * @return 설정 목록 + * @exception Exception + */ + List mngrJoinFormConfigList(MngrJoinFormConfigSearchVO mngrJoinConfigSearchVo) throws IOException, SQLException; + + /** + * 설정 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrJoinFormConfigTotCnt(MngrJoinFormConfigSearchVO searchVO) throws IOException, SQLException; + + + /** + * 설정을 등록한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrRegistJoinFormConfig(MngrJoinFormConfigSearchVO searchVO) throws IOException, SQLException; + + + MngrJoinFormConfigSearchVO mngrGetJoinFormBySiteCode(String siteCode, MngrJoinFormConfigSearchVO searchVO) throws IOException, SQLException; + + + /** + * 설정을 수정한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 수정한 개수 + * @exception + */ + int mngrModifyJoinFormConfig(MngrJoinFormConfigSearchVO searchVO) throws IOException, SQLException; + + +} diff --git a/src/main/java/egovframework/itgcms/core/joinformconfig/service/impl/MngrContractMapper.java b/src/main/java/egovframework/itgcms/core/joinformconfig/service/impl/MngrContractMapper.java new file mode 100644 index 0000000..8ac8690 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/joinformconfig/service/impl/MngrContractMapper.java @@ -0,0 +1,84 @@ +package egovframework.itgcms.core.joinformconfig.service.impl; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import egovframework.itgcms.core.joinformconfig.service.MngrContractSearchVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +/** + * JoinFormConfig에 관한 데이터처리 매퍼 클래스 + * + * @author 표준프레임워크센터 + * @since 2014.01.24 + * @version 1.0 + * == 개정이력(Modification Information) == + * + * 수정일 수정자 수정내용 + * ---------------- ------------ --------------------------- + * 2017.05.16 표준프레임워크센터 최초 생성 + * + */ +@Mapper("contractMapper") +public interface MngrContractMapper { + + /** + * @throws SQLException + * 회원 가입 약관을 등록한다 + * @param contractSearchVo - 등록할 정보가 담긴 VO + * @exception + */ + int mngrInsertContract(MngrContractSearchVO contractSearchVo) throws SQLException; + + /** + * 약관 전체 목록을 조회한다 + * @param contractSearchVo - 등록할 정보가 담긴 VO + * @return 약관 목록 + * @exception + */ + ListmngrGetContractAllList() throws SQLException; + + + ListmngrGetContractList(MngrContractSearchVO contractSearchVo) throws SQLException; + /** + * 약관 정보을 조회한다 + * @param contractSearchVo - 등록할 정보가 담긴 VO + * @return 약관 정보 + * @exception + */ + MngrContractSearchVO mngrGetContractObj(int no) throws SQLException; + + /** + * 약관 정보을 수정한다 + * @param contractSearchVo - 수정할 정보가 담긴 VO + * @return 약관 정보 + * @exception + */ + int mngrUpdateContract(MngrContractSearchVO contactSearchVo) throws SQLException; + + + int mngrContractTotCnt(MngrContractSearchVO contactSearchVo) throws SQLException; + + List mngrGetContractListByContractDesc(HashMap contractDesc) throws SQLException; + + int mngrDeleteContract(MngrContractSearchVO contactSearchVo) throws SQLException; + int mngrDeleteContracts(MngrContractSearchVO contactSearchVo) throws SQLException; + + + /** + * @throws SQLException + * 메뉴 약관 정보를 설정한다. + * @param contractSearchVo - 등록할 정보가 담긴 VO + * @exception + */ + int setMenuContractInfo(EgovMap egovMap) throws SQLException; + + EgovMap getMenuContractInfo(EgovMap egovMap) throws SQLException; + + int delMenuContractInfo(EgovMap egovMap) throws SQLException; + + ListmngrGetContractListByContractDesc(EgovMap egovMap) throws SQLException; +} + diff --git a/src/main/java/egovframework/itgcms/core/joinformconfig/service/impl/MngrContractServiceImpl.java b/src/main/java/egovframework/itgcms/core/joinformconfig/service/impl/MngrContractServiceImpl.java new file mode 100644 index 0000000..cce7a1a --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/joinformconfig/service/impl/MngrContractServiceImpl.java @@ -0,0 +1,103 @@ +package egovframework.itgcms.core.joinformconfig.service.impl; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.itgcms.core.joinformconfig.service.MngrContractSearchVO; +import egovframework.itgcms.core.joinformconfig.service.MngrContractService; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +@Service("contractService") +public class MngrContractServiceImpl implements MngrContractService { + + @Resource(name="contractMapper") + private MngrContractMapper contractMapper; + + @Override + public List mngrGetContractList(MngrContractSearchVO searchVo) throws IOException, SQLException { + return contractMapper.mngrGetContractList(searchVo); + } + + @Override + public List mngrGetContractList() throws IOException, SQLException { + return contractMapper.mngrGetContractAllList(); + } + + @Override + public int mngrContractTotCnt(MngrContractSearchVO searchVo) throws IOException, SQLException { + return contractMapper.mngrContractTotCnt(searchVo); + } + + @Override + public int mngrRegistContract(MngrContractSearchVO contractSearchVo) throws IOException, SQLException { + return contractMapper.mngrInsertContract(contractSearchVo); + } + + @Override + public MngrContractSearchVO mngrGetContractObj(MngrContractSearchVO searchVo) throws IOException, SQLException { + MngrContractSearchVO tmp = contractMapper.mngrGetContractObj(searchVo.getNo()); + searchVo.setTitle(tmp.getTitle()); + searchVo.setContents(tmp.getContents()); + searchVo.setRequired(tmp.getRequired()); + searchVo.setRegMemId(tmp.getRegMemId()); + searchVo.setRegDt(tmp.getRegDt()); + searchVo.setUpdMemId(tmp.getUpdMemId()); + searchVo.setUpdDt(tmp.getUpdDt()); + return searchVo; + } + + @Override + public int mngrUpdateContract(MngrContractSearchVO contactSearchVo) throws IOException, SQLException { + return contractMapper.mngrUpdateContract(contactSearchVo); + } + + @Override + public List mngrGetContractListByContractDesc(String[] contractDesc) throws IOException, SQLException { + HashMap contractMap = new HashMap<>(); + contractMap.put("contractDesc", contractDesc); + return contractMapper.mngrGetContractListByContractDesc(contractMap); + } + + @Override + public int mngrDeleteContract(MngrContractSearchVO contactSearchVo) throws IOException, SQLException { + return contractMapper.mngrDeleteContract(contactSearchVo); + } + + @Override + public int mngrDeleteContractList(MngrContractSearchVO contactSearchVo, String listDesc) throws IOException, SQLException { + contactSearchVo.setNos(listDesc.split(",")); + return contractMapper.mngrDeleteContracts(contactSearchVo); + } + + @Override + public int setMenuContractInfo(EgovMap egovMap) throws IOException, SQLException { + // TODO Auto-generated method stub + + // 1. 관련 매핑 정보를 삭제 + contractMapper.delMenuContractInfo(egovMap); + + // 2. 새롭게 기록 + int result = contractMapper.setMenuContractInfo(egovMap); + + return result; + } + + @Override + public EgovMap getMenuContractInfo(EgovMap egovMap) throws IOException, SQLException { + // TODO Auto-generated method stub + return contractMapper.getMenuContractInfo(egovMap); + } + + @Override + public List mngrGetContractListByContractDesc(EgovMap egovMap) throws IOException, SQLException { + return contractMapper.mngrGetContractListByContractDesc(egovMap); + } + + +} diff --git a/src/main/java/egovframework/itgcms/core/joinformconfig/service/impl/MngrJoinFormConfigMapper.java b/src/main/java/egovframework/itgcms/core/joinformconfig/service/impl/MngrJoinFormConfigMapper.java new file mode 100644 index 0000000..81f3bce --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/joinformconfig/service/impl/MngrJoinFormConfigMapper.java @@ -0,0 +1,64 @@ +package egovframework.itgcms.core.joinformconfig.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.itgcms.core.joinformconfig.service.MngrJoinFormConfigSearchVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +/** + * JoinFormConfig에 관한 데이터처리 매퍼 클래스 + * + * @author 표준프레임워크센터 + * @since 2014.01.24 + * @version 1.0 + * == 개정이력(Modification Information) == + * + * 수정일 수정자 수정내용 + * ---------------- ------------ --------------------------- + * 2017.05.16 표준프레임워크센터 최초 생성 + * + */ +@Mapper("joinFormConfigMapper") +public interface MngrJoinFormConfigMapper { + + /** + * 설정 목록을 조회한다. + * @param mngrJoinFormSearchVO - 조회할 정보가 담긴 VO + * @return 설정 목록 + * @exception Exception + */ + List mngrJoinFormConfigList(MngrJoinFormConfigSearchVO mngrJoinConfigSearchVo) throws SQLException; + + /** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrJoinFormConfigTotCnt(MngrJoinFormConfigSearchVO searchVO) throws SQLException; + + /** + * 회원 가입 폼 설정을 등록 한다. + * @param searchVO - 등록할 정보가 담긴 VO + * @exception + */ + int mngrInsertJoinFormConfig(MngrJoinFormConfigSearchVO searchVO) throws SQLException; + + + /** + * 설정을 조회한다. + * @param sitCode - 조회할 설정의 siteCode + * @return 설정 목록 + * @exception Exception + */ + MngrJoinFormConfigSearchVO mngrGetJoinFormBySiteCode(String siteCode) throws SQLException; + + /** + * 회원 가입 폼 설정을 수정 한다. + * @param searchVO - 수정할 정보가 담긴 VO + * @exception + */ + int mngrModifyJoinFormConfig(MngrJoinFormConfigSearchVO searchVO) throws SQLException; + +} diff --git a/src/main/java/egovframework/itgcms/core/joinformconfig/service/impl/MngrJoinFormConfigServiceImpl.java b/src/main/java/egovframework/itgcms/core/joinformconfig/service/impl/MngrJoinFormConfigServiceImpl.java new file mode 100644 index 0000000..aef04cc --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/joinformconfig/service/impl/MngrJoinFormConfigServiceImpl.java @@ -0,0 +1,91 @@ +package egovframework.itgcms.core.joinformconfig.service.impl; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import egovframework.itgcms.core.joinformconfig.service.MngrJoinFormConfigSearchVO; +import egovframework.itgcms.core.joinformconfig.service.MngrJoinFormConfigService; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +@Service("joinFormConfigService") +public class MngrJoinFormConfigServiceImpl extends EgovAbstractServiceImpl implements MngrJoinFormConfigService { + + private static final Logger LOGGER = LoggerFactory.getLogger(MngrJoinFormConfigServiceImpl.class); + + @Resource(name="joinFormConfigMapper") + private MngrJoinFormConfigMapper joinFormConfigMapper; + + @Resource(name="contractMapper") + private MngrContractMapper contractMapper; + + + @Override + public List mngrJoinFormConfigList(MngrJoinFormConfigSearchVO mngrJoinConfigSearchVo) throws IOException, SQLException { + return joinFormConfigMapper.mngrJoinFormConfigList(mngrJoinConfigSearchVo); + } + + @Override + public int mngrJoinFormConfigTotCnt(MngrJoinFormConfigSearchVO mngrJoinConfigSearchVo) throws IOException, SQLException { + return joinFormConfigMapper.mngrJoinFormConfigTotCnt(mngrJoinConfigSearchVo); + } + + @Override + public int mngrRegistJoinFormConfig(MngrJoinFormConfigSearchVO searchVO) throws IOException, SQLException{ + return joinFormConfigMapper.mngrInsertJoinFormConfig(searchVO); + } + + @Override + public MngrJoinFormConfigSearchVO mngrGetJoinFormBySiteCode(String siteCode, MngrJoinFormConfigSearchVO searchVO) throws IOException, SQLException { + + MngrJoinFormConfigSearchVO returnVal = joinFormConfigMapper.mngrGetJoinFormBySiteCode(siteCode); + + if(returnVal==null){ + returnVal = new MngrJoinFormConfigSearchVO(); + } + + if (searchVO== null) { + searchVO = returnVal; + } else { + searchVO.setNo(returnVal.getNo()); + searchVO.setName(returnVal.getName()); + searchVO.setPasstrycnt(returnVal.getPasstrycnt()); + searchVO.setPhone(returnVal.getPhone()); + searchVO.setMobile(returnVal.getMobile()); + searchVO.setEmail(returnVal.getEmail()); + searchVO.setFax(returnVal.getFax()); + searchVO.setAddress(returnVal.getAddress()); + searchVO.setBirth(returnVal.getBirth()); + searchVO.setSex(returnVal.getSex()); + searchVO.setGrp(returnVal.getGrp()); + searchVO.setRegMemId(returnVal.getRegMemId()); + searchVO.setRegDt(returnVal.getRegDt()); + searchVO.setUpdDt(returnVal.getUpdDt()); + searchVO.setUpdMemId(returnVal.getUpdMemId()); + searchVO.setContractDesc(returnVal.getContractDesc()); + searchVO.setUseJoinwait(returnVal.getUseJoinwait()); + } + + if (searchVO.getCntContract() > 0) { + String[] contractArr = searchVO.getContractDesc().split(","); + HashMap contractMap = new HashMap<>(); + contractMap.put("contractDesc", contractArr); + searchVO.setContractList(contractMapper.mngrGetContractListByContractDesc(contractMap)); + } + + return searchVO; + } + + @Override + public int mngrModifyJoinFormConfig(MngrJoinFormConfigSearchVO searchVO) throws IOException, SQLException { + return joinFormConfigMapper.mngrModifyJoinFormConfig(searchVO); + } + +} diff --git a/src/main/java/egovframework/itgcms/core/main/service/MngrMainService.java b/src/main/java/egovframework/itgcms/core/main/service/MngrMainService.java new file mode 100644 index 0000000..adac733 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/main/service/MngrMainService.java @@ -0,0 +1,23 @@ +package egovframework.itgcms.core.main.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; +/** + * @파일명 : MngrMainService.java + * @파일정보 : 팝업관리 서비스 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2017. 5. 23. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface MngrMainService { + + List mngrManagerMenuListRecursive(MngrManagerMenuVO mngrManagerMenuVO)throws IOException, SQLException; + + List mngrTreeMenuList(String pcode)throws IOException, SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/main/service/MngrManagerMenuSearchVO.java b/src/main/java/egovframework/itgcms/core/main/service/MngrManagerMenuSearchVO.java new file mode 100644 index 0000000..83d06b1 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/main/service/MngrManagerMenuSearchVO.java @@ -0,0 +1,58 @@ +package egovframework.itgcms.core.main.service; + +import java.io.UnsupportedEncodingException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO;; + +public class MngrManagerMenuSearchVO extends DefaultVO { + + /** + * + */ + private static final long serialVersionUID = -1549189230088160934L; + private static final Logger logger = LogManager.getLogger(MngrManagerMenuSearchVO.class); + + /** 인덱스 */ + String id = ""; //검색조건 유지 + String query = ""; + String minDepth = "0"; + String maxDepth = "10"; + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getMinDepth() { + return minDepth; + } + + public void setMinDepth(String minDepth) { + this.minDepth = minDepth; + } + + public String getMaxDepth() { + return maxDepth; + } + + public void setMaxDepth(String maxDepth) { + this.maxDepth = maxDepth; + } + + public String getQuery() { + String query = super.queryString(); + try{ + query += "&id=" + java.net.URLEncoder.encode(this.id, "UTF-8"); + }catch(UnsupportedEncodingException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/main/service/MngrManagerMenuVO.java b/src/main/java/egovframework/itgcms/core/main/service/MngrManagerMenuVO.java new file mode 100644 index 0000000..e98a651 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/main/service/MngrManagerMenuVO.java @@ -0,0 +1,153 @@ +package egovframework.itgcms.core.main.service; + +import java.util.ArrayList; +import java.util.List; + +import egovframework.itgcms.core.manager.service.MngrManagerVO; + +public class MngrManagerMenuVO extends MngrManagerMenuSearchVO{ + + /** + * + */ + private static final long serialVersionUID = -7251620276492515248L; + /** 메뉴 코드 */ + String menuCode = ""; + /** 메뉴 이름 */ + String menuName = ""; + /** 링크 주소 */ + String menuUrl = ""; + /** 링크 주소 */ + String menuIcon = ""; + /** 뎁스 */ + String menuDepth = ""; + /** 부모코드 */ + String menuPcode = "0"; + /** 순서 */ + String menuOrder = ""; + /** 등록일 */ + String regdt = ""; + /** 수정일 */ + String upddt = ""; + /** 삭제일 */ + String deldt = ""; + /** 등록자아이디 */ + String regmemid = ""; + /** 수정자아이디 */ + String updmemid = ""; + /** 삭제자아이디 */ + String delmemid = ""; + /** 삭제여부 */ + String delyn = ""; + /** 서브 메뉴 */ + String subtree = ""; + + List mngrManagerMenuList = null; + + MngrManagerVO mngrManagerVO = null; + + + public String getMenuCode() { + return menuCode; + } + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + public String getMenuName() { + return menuName; + } + public void setMenuName(String menuName) { + this.menuName = menuName; + } + public String getMenuUrl() { + return menuUrl; + } + public void setMenuUrl(String menuUrl) { + this.menuUrl = menuUrl; + } + public String getMenuIcon() { + return menuIcon; + } + public void setMenuIcon(String menuIcon) { + this.menuIcon = menuIcon; + } + public String getMenuDepth() { + return menuDepth; + } + public void setMenuDepth(String menuDepth) { + this.menuDepth = menuDepth; + } + public String getMenuPcode() { + return menuPcode; + } + public void setMenuPcode(String menuPcode) { + this.menuPcode = menuPcode; + } + public String getMenuOrder() { + return menuOrder; + } + public void setMenuOrder(String menuOrder) { + this.menuOrder = menuOrder; + } + public String getRegdt() { + return regdt; + } + public void setRegdt(String regdt) { + this.regdt = regdt; + } + public String getUpddt() { + return upddt; + } + public void setUpddt(String upddt) { + this.upddt = upddt; + } + public String getDeldt() { + return deldt; + } + public void setDeldt(String deldt) { + this.deldt = deldt; + } + public String getRegmemid() { + return regmemid; + } + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + public String getUpdmemid() { + return updmemid; + } + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + public String getDelmemid() { + return delmemid; + } + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + public String getDelyn() { + return delyn; + } + public void setDelyn(String delyn) { + this.delyn = delyn; + } + public String getSubtree() { + return subtree; + } + public void setSubtree(String subtree) { + this.subtree = subtree; + } + public List getMngrManagerMenuList() { + return mngrManagerMenuList; + } + public void setMngrMenuList(List mngrManagerMenuList) { + this.mngrManagerMenuList = new ArrayList(); + this.mngrManagerMenuList.addAll(mngrManagerMenuList); + } + public MngrManagerVO getMngrManagerVO() { + return mngrManagerVO; + } + public void setMngrManagerVO(MngrManagerVO mngrManagerVO) { + this.mngrManagerVO = mngrManagerVO; + } +} diff --git a/src/main/java/egovframework/itgcms/core/main/service/impl/MngrMainMapper.java b/src/main/java/egovframework/itgcms/core/main/service/impl/MngrMainMapper.java new file mode 100644 index 0000000..7f2f9e6 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/main/service/impl/MngrMainMapper.java @@ -0,0 +1,45 @@ +/* + * Copyright 2011 MOPAS(Ministry of Public Mngristration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.main.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.itgcms.core.main.service.MngrManagerMenuVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +/** + * menu에 관한 데이터처리 매퍼 클래스 + * + * @author 표준프레임워크센터 + * @since 2014.01.24 + * @version 1.0 + * @see
    + *  == 개정이력(Modification Information) ==
    + *
    + *          수정일          수정자           수정내용
    + *  ----------------    ------------    ---------------------------
    + *   2014.01.24        표준프레임워크센터          최초 생성
    + *
    + * 
    + */ +@Mapper("mngrMainMapper") +public interface MngrMainMapper { + + List mngrManagerMenuListRecursive(MngrManagerMenuVO mngrManagerMenuVO)throws SQLException; + + List mngrTreeMenuList(String pcode)throws SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/main/service/impl/MngrMainServiceImpl.java b/src/main/java/egovframework/itgcms/core/main/service/impl/MngrMainServiceImpl.java new file mode 100644 index 0000000..1d6d2bb --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/main/service/impl/MngrMainServiceImpl.java @@ -0,0 +1,70 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.main.service.impl; + +import java.io.IOException; +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.itgcms.core.main.service.MngrMainService; +import egovframework.itgcms.core.main.service.MngrManagerMenuVO; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * @파일명 : MenuServiceImpl.java + * @파일정보 : 팝업 서비스 구현 클래스 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Service("mngrMainService") +public class MngrMainServiceImpl extends EgovAbstractServiceImpl implements MngrMainService { + + private static final Logger LOGGER = LoggerFactory.getLogger(MngrMainServiceImpl.class); + + /** MenuDAO */ + // ibatis 사용 + /*@Resource(name="MenuDAO") + private MenuDAO menuDAO;*/ + // mybatis 사용 + @Resource(name="mngrMainMapper") + private MngrMainMapper mngrMainMapper; + + + @Override + public List mngrManagerMenuListRecursive(MngrManagerMenuVO mngrManagerMenuVO) throws IOException, SQLException { + return mngrMainMapper.mngrManagerMenuListRecursive(mngrManagerMenuVO); + } + + @Override + public List mngrTreeMenuList(String pcode) + throws IOException, SQLException { + return mngrMainMapper.mngrTreeMenuList(pcode); + } + +} diff --git a/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerLoginLogSearchVO.java b/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerLoginLogSearchVO.java new file mode 100644 index 0000000..bfb61e7 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerLoginLogSearchVO.java @@ -0,0 +1,71 @@ +package egovframework.itgcms.core.manager.service; + +import java.io.UnsupportedEncodingException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO;; + +public class MngrManagerLoginLogSearchVO extends DefaultVO { + /** + * + */ + private static final long serialVersionUID = 5358593433818756365L; + private static final Logger logger = LogManager.getLogger(MngrManagerLoginLogSearchVO.class); + + /** 관리자 아이디 */ + String id = ""; //검색조건 유지 + + String query = ""; + + String schSdt = ""; //기간검색 시작일 + String schEdt = ""; //기간검색 종료일 + String schType = ""; //로그구분 + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + + public String getSchSdt() { + return schSdt; + } + + public void setSchSdt(String schSdt) { + this.schSdt = schSdt; + } + + public String getSchEdt() { + return schEdt; + } + + public void setSchEdt(String schEdt) { + this.schEdt = schEdt; + } + + public String getSchType() { + return schType; + } + + public void setSchType(String schType) { + this.schType = schType; + } + + public String getQuery() { + String query = super.queryString(); + try{ + query += "&id=" + java.net.URLEncoder.encode(this.id, "UTF-8"); + query += "&schSdt=" + java.net.URLEncoder.encode(this.schSdt, "UTF-8"); + query += "&schEdt=" + java.net.URLEncoder.encode(this.schEdt, "UTF-8"); + query += "&schType=" + java.net.URLEncoder.encode(this.schType, "UTF-8"); + }catch(UnsupportedEncodingException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerLoginLogVO.java b/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerLoginLogVO.java new file mode 100644 index 0000000..4dca4ef --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerLoginLogVO.java @@ -0,0 +1,82 @@ +package egovframework.itgcms.core.manager.service; + + +public class MngrManagerLoginLogVO extends MngrManagerLoginLogSearchVO { + + /** + * + */ + String logRegdt = ""; + String logId = ""; + String logType = ""; + String logIp = ""; + String logAgent = ""; + String logOs = ""; + String logDevice = ""; + String logBrowser = ""; + String logTypeName = ""; + String logSite = ""; + + public String getLogRegdt() { + return logRegdt; + } + public void setLogRegdt(String logRegdt) { + this.logRegdt = logRegdt; + } + public String getLogId() { + return logId; + } + public void setLogId(String logId) { + this.logId = logId; + } + public String getLogType() { + return logType; + } + public void setLogType(String logType) { + this.logType = logType; + } + public String getLogIp() { + return logIp; + } + public void setLogIp(String logIp) { + this.logIp = logIp; + } + public String getLogAgent() { + return logAgent; + } + public void setLogAgent(String logAgent) { + this.logAgent = logAgent; + } + public String getLogOs() { + return logOs; + } + public void setLogOs(String logOs) { + this.logOs = logOs; + } + public String getLogDevice() { + return logDevice; + } + public void setLogDevice(String logDevice) { + this.logDevice = logDevice; + } + public String getLogBrowser() { + return logBrowser; + } + public void setLogBrowser(String logBrowser) { + this.logBrowser = logBrowser; + } + public String getLogTypeName() { + return logTypeName; + } + public void setLogTypeName(String logTypeName) { + this.logTypeName = logTypeName; + } + public String getLogSite() { + return logSite; + } + public void setLogSite(String logSite) { + this.logSite = logSite; + } + + +} diff --git a/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerSearchVO.java b/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerSearchVO.java new file mode 100644 index 0000000..8eec751 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerSearchVO.java @@ -0,0 +1,51 @@ +package egovframework.itgcms.core.manager.service; + +import java.io.UnsupportedEncodingException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO;; + +public class MngrManagerSearchVO extends DefaultVO { + /** + * + */ + private static final long serialVersionUID = 5358593433818756365L; + private static final Logger logger = LogManager.getLogger(MngrManagerSearchVO.class); + + /** 관리자 아이디 */ + String id = ""; //검색조건 유지 + + /** 관리자 정보수정 */ + String isMyInfo = "Y"; //검색조건 유지 + + String query = ""; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsMyInfo() { + return isMyInfo; + } + + public void setIsMyInfo(String isMyInfo) { + this.isMyInfo = isMyInfo; + } + + public String getQuery() { + String query = super.queryString(); + try{ + query += "&id=" + java.net.URLEncoder.encode(this.id, "UTF-8"); + query += "&isMyInfo=" + java.net.URLEncoder.encode(this.isMyInfo, "UTF-8"); + }catch(UnsupportedEncodingException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerService.java b/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerService.java new file mode 100644 index 0000000..4f0c296 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerService.java @@ -0,0 +1,100 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.manager.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +/** + * @파일명 : MngrManagerService.java + * @파일정보 : 관리자관리 서비스 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface MngrManagerService { + + /** + * 관리자 목록을 조회한다(로그용). + * @param mngrManagerSearchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List selectMngrManagerList(MngrManagerSearchVO mngrManagerSearchVO) throws IOException, SQLException; + + /** + * 관리자 목록을 조회한다(모듈용). + * @param mngrManagerSearchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List mMngrManagerList(MngrManagerSearchVO mngrManagerSearchVO) throws IOException, SQLException; + + /** + * 관리자 수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrManagerListTotCnt(MngrManagerSearchVO mngrManagerSearchVO) throws IOException, SQLException; + + void mngrManagerRegistProc(MngrManagerVO mngrManagerVO) throws IOException, SQLException; + + MngrManagerVO mngrManagerView(MngrManagerSearchVO mngrManagerSearchVO) throws IOException, SQLException; + + String mngrManagerCheckPower(MngrManagerVO mngrManagerVO) throws IOException, SQLException; + + String updateMngrManagerUpdateProc(MngrManagerVO mngrManagerVO) throws IOException, SQLException; + + void mngrManagerDelProc(MngrManagerVO mngrManagerVO)throws IOException, SQLException; + + void mngrManagerChkDelProc(MngrManagerVO mngrManagerVO)throws IOException, SQLException; + + int mngrManagerCheckId(MngrManagerSearchVO mngrManagerSearchVO)throws IOException, SQLException; + + void mngrManagerInitPass(MngrManagerVO managerVO)throws IOException, SQLException; + + void increaseMngPassTryCnt(MngrManagerVO managerVO)throws IOException, SQLException; + + List mngrManagerListAjax(MngrManagerSearchVO mngrManagerSearchVO)throws IOException, SQLException; + + List mngrManagerAuthListAjax(String authIdx) throws IOException, SQLException; + + List mngrManagerAuthPowerListAjax(String powerCode) throws IOException, SQLException; + + void mngrManagerLoginLogInsert(MngrManagerLoginLogVO mngrManagerLoginLogVO) throws IOException, SQLException; + + List mngrManagerLoginLogAjax(String log_id) throws IOException, SQLException; + + List mngrManagerLoginLogList( + MngrManagerLoginLogSearchVO mngrManagerLoginLogSearchVO) throws IOException, SQLException; + + int mngrManagerLoginLogListTotCnt( + MngrManagerLoginLogSearchVO mngrManagerLoginLogSearchVO) throws IOException, SQLException; + + void mngrManagerLoginLogDelProc( + MngrManagerLoginLogSearchVO mngrManagerLoginLogSearchVO) throws IOException, SQLException; + + String chkPassBfView(String mngrId) throws IOException, SQLException; + + int mngrCntIp(String userIp) throws IOException, SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerVO.java b/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerVO.java new file mode 100644 index 0000000..c1d8e0f --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/manager/service/MngrManagerVO.java @@ -0,0 +1,265 @@ +package egovframework.itgcms.core.manager.service; + + +public class MngrManagerVO extends MngrManagerSearchVO{ + /** + * + */ + private static final long serialVersionUID = -6870719133175969542L; + /** 아이디 */ + private String mngId = ""; + /** 이름 */ + private String mngName = ""; + /** 비밀번호 */ + private String mngPass = ""; + /** 전화번호 */ + private String mngPhone = ""; + /** 휴대폰번호 */ + private String mngMobile = ""; + /** 이메일주소 */ + private String mngEmail = ""; + /** 팩스번호 */ + private String mngFax = ""; + /** 부서코드 */ + private String groupCode = ""; + /** 직위 */ + private String positionCode = ""; + /** 권한 */ + private String authIdx = ""; + /** 업무내용 */ + private String mngWork = ""; + /** 사이트코드 */ + private String siteCode = ""; + /** 등록일 */ + private String regdt = ""; + /** 수정일 */ + private String upddt = ""; + /** 삭제일 */ + private String deldt = ""; + /** 등록자아이디 */ + private String regmemid = ""; + /** 수정자아이디 */ + private String updmemid = ""; + /** 삭제자아이디 */ + private String delmemid = ""; + /** 삭제여부 */ + private String delyn = ""; + /** IP제한여부 */ + private String mngIpyn = ""; + /** IP목록 */ + private String mngIp = ""; + /** 비밀번호수정일 */ + private String mngPassdt = ""; + /** 비밀번호 수정횟수 */ + private String mngPasstrycnt = ""; + /** 관리자 구분 */ + private String mngType = ""; + + /** 비밀번호 확인 */ + private String mngPass2 = ""; + + /** 부서코드명 */ + private String groupCodeName = ""; + + /** 직위명 */ + private String positionCodeName = ""; + + /** 권한 롤 명 */ + private String authIdxName = ""; + + /** 메뉴권한 선택 코드 */ + private String menuCodes = ""; + + /** 관리자 등급 상세*/ + private String mngPower = ""; + + /** 관리자 등급 상세*/ + private String mngAuth = ""; + + public String getMngId() { + return mngId; + } + public void setMngId(String mngId) { + this.mngId = mngId; + } + public String getMngName() { + return mngName; + } + public void setMngName(String mngName) { + this.mngName = mngName; + } + public String getMngPass() { + return mngPass; + } + public void setMngPass(String mngPass) { + this.mngPass = mngPass; + } + public String getMngPhone() { + return mngPhone; + } + public void setMngPhone(String mngPhone) { + this.mngPhone = mngPhone; + } + public String getMngMobile() { + return mngMobile; + } + public void setMngMobile(String mngMobile) { + this.mngMobile = mngMobile; + } + public String getMngEmail() { + return mngEmail; + } + public void setMngEmail(String mngEmail) { + this.mngEmail = mngEmail; + } + public String getMngFax() { + return mngFax; + } + public void setMngFax(String mngFax) { + this.mngFax = mngFax; + } + public String getGroupCode() { + return groupCode; + } + public void setGroupCode(String groupCode) { + this.groupCode = groupCode; + } + public String getPositionCode() { + return positionCode; + } + public void setPositionCode(String positionCode) { + this.positionCode = positionCode; + } + public String getAuthIdx() { + return authIdx; + } + public void setAuthIdx(String authIdx) { + this.authIdx = authIdx; + } + public String getMngWork() { + return mngWork; + } + public void setMngWork(String mngWork) { + this.mngWork = mngWork; + } + public String getSiteCode() { + return siteCode; + } + public void setSiteCode(String siteCode) { + this.siteCode = siteCode; + } + public String getRegdt() { + return regdt; + } + public void setRegdt(String regdt) { + this.regdt = regdt; + } + public String getUpddt() { + return upddt; + } + public void setUpddt(String upddt) { + this.upddt = upddt; + } + public String getDeldt() { + return deldt; + } + public void setDeldt(String deldt) { + this.deldt = deldt; + } + public String getRegmemid() { + return regmemid; + } + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + public String getUpdmemid() { + return updmemid; + } + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + public String getDelmemid() { + return delmemid; + } + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + public String getDelyn() { + return delyn; + } + public void setDelyn(String delyn) { + this.delyn = delyn; + } + public String getMngIpyn() { + return mngIpyn; + } + public void setMngIpyn(String mngIpyn) { + this.mngIpyn = mngIpyn; + } + public String getMngIp() { + return mngIp; + } + public void setMngIp(String mngIp) { + this.mngIp = mngIp; + } + public String getMngPassdt() { + return mngPassdt; + } + public void setMngPassdt(String mngPassdt) { + this.mngPassdt = mngPassdt; + } + public String getMngPasstrycnt() { + return mngPasstrycnt; + } + public void setMngPasstrycnt(String mngPasstrycnt) { + this.mngPasstrycnt = mngPasstrycnt; + } + public String getMngPass2() { + return mngPass2; + } + public void setMngPass2(String mngPass2) { + this.mngPass2 = mngPass2; + } + public String getGroupCodeName() { + return groupCodeName; + } + public void setGroupCodeName(String groupCodeName) { + this.groupCodeName = groupCodeName; + } + public String getPositionCodeName() { + return positionCodeName; + } + public void setPositionCodeName(String positionCodeName) { + this.positionCodeName = positionCodeName; + } + public String getMngType() { + return mngType; + } + public void setMngType(String mngType) { + this.mngType = mngType; + } + public String getMenuCodes() { + return menuCodes; + } + public void setMenuCodes(String menuCodes) { + this.menuCodes = menuCodes; + } + public String getAuthIdxName() { + return authIdxName; + } + public void setAuthIdxName(String authIdxName) { + this.authIdxName = authIdxName; + } + public String getMngPower() { + return mngPower; + } + public void setMngPower(String mngPower) { + this.mngPower = mngPower; + } + public String getMngAuth() { + return mngAuth; + } + public void setMngAuth(String mngAuth) { + this.mngAuth = mngAuth; + } +} diff --git a/src/main/java/egovframework/itgcms/core/manager/service/impl/MngrManagerMapper.java b/src/main/java/egovframework/itgcms/core/manager/service/impl/MngrManagerMapper.java new file mode 100644 index 0000000..70737d6 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/manager/service/impl/MngrManagerMapper.java @@ -0,0 +1,110 @@ +/* + * Copyright 2011 MOPAS(Ministry of Public Mngristration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.manager.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.itgcms.core.manager.service.MngrManagerLoginLogSearchVO; +import egovframework.itgcms.core.manager.service.MngrManagerLoginLogVO; +import egovframework.itgcms.core.manager.service.MngrManagerSearchVO; +import egovframework.itgcms.core.manager.service.MngrManagerVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +/** + * manager에 관한 데이터처리 매퍼 클래스 + * + * @author 표준프레임워크센터 + * @since 2014.01.24 + * @version 1.0 + * @see
    + *  == 개정이력(Modification Information) ==
    + *
    + *          수정일          수정자           수정내용
    + *  ----------------    ------------    ---------------------------
    + *   2014.01.24        표준프레임워크센터          최초 생성
    + *
    + * 
    + */ +@Mapper("mngrManagerMapper") +public interface MngrManagerMapper { + + /** + * 글 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List mngrManagerList(MngrManagerSearchVO searchVO) throws SQLException; + + /** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrManagerListTotCnt(MngrManagerSearchVO searchVO) throws SQLException; + + void mngrManagerRegistProc(MngrManagerVO managerVO) throws SQLException; + + MngrManagerVO mngrManagerView(MngrManagerSearchVO searchVO) throws SQLException; + + void mngrManagerUpdateProc(MngrManagerVO managerVO) throws SQLException; + + void mngrManagerDelProc(MngrManagerVO managerVO)throws SQLException; + + void mngrManagerChkDelProc(MngrManagerVO managerVO)throws SQLException; + + int mngrManagerCheckId(MngrManagerSearchVO mngrManagerSearchVO)throws SQLException; + + void mngrManagerInitPass(MngrManagerVO managerVO)throws SQLException; + + void increaseMngPassTryCnt(MngrManagerVO managerVO)throws SQLException; + + List mngrManagerListAjax(MngrManagerSearchVO mngrManagerSearchVO)throws SQLException; + + List mngrManagerAuthListAjax(String authIdx)throws SQLException; + + List mngrManagerAuthPowerListAjax(String powerCode)throws SQLException; + + void mngrManagerLoginLogInsert(MngrManagerLoginLogVO mngrManagerLoginLogVO)throws SQLException; + + List mngrManagerLoginLogAjax(String log_id)throws SQLException; + + List mngrManagerLoginLogList( + MngrManagerLoginLogSearchVO mngrManagerLoginLogSearchVO) throws SQLException; + + + int mngrManagerLoginLogListTotCnt( + MngrManagerLoginLogSearchVO mngrManagerLoginLogSearchVO) throws SQLException; + + void mngrManagerLoginLogDelProc( + MngrManagerLoginLogSearchVO mngrManagerLoginLogSearchVO) throws SQLException; + + /** + * 회원정보 상세 진입 중 비밀번호 입력폼에서 비밀번호 체크 + * @param String + */ + String mngrChkPassBfView(String mngrId) throws SQLException ; + + /** + * 관리자상세 - 관리자구분 변경 시 해당 관리등급의 권한 SELECT + * @param mngrManagerVO + */ + String mngrManagerCheckPower(MngrManagerVO managerVO) throws SQLException ; + + int mngrCntIp(String userIp) throws SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/manager/service/impl/MngrManagerServiceImpl.java b/src/main/java/egovframework/itgcms/core/manager/service/impl/MngrManagerServiceImpl.java new file mode 100644 index 0000000..67b2cd5 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/manager/service/impl/MngrManagerServiceImpl.java @@ -0,0 +1,282 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.manager.service.impl; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import egovframework.itgcms.core.authority.service.MngrAuthorityVO; +import egovframework.itgcms.core.authority.service.impl.MngrAuthorityMapper; +import egovframework.itgcms.core.manager.service.MngrManagerLoginLogSearchVO; +import egovframework.itgcms.core.manager.service.MngrManagerLoginLogVO; +import egovframework.itgcms.core.manager.service.MngrManagerSearchVO; +import egovframework.itgcms.core.manager.service.MngrManagerService; +import egovframework.itgcms.core.manager.service.MngrManagerVO; +import egovframework.itgcms.core.managerlog.service.MngrManagerLogService; +import egovframework.itgcms.core.managerlog.service.MngrManagerLogVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * @파일명 : ManagerServiceImpl.java + * @파일정보 : 관리자 서비스 구현 클래스 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Service("mngrManagerService") +public class MngrManagerServiceImpl extends EgovAbstractServiceImpl implements MngrManagerService { + @Autowired + HttpServletRequest request; + + private static final Logger LOGGER = LoggerFactory.getLogger(MngrManagerServiceImpl.class); + + /** ManagerDAO */ + // ibatis 사용 + /*@Resource(name="ManagerDAO") + private ManagerDAO managerDAO;*/ + // mybatis 사용 + @Resource(name="mngrManagerMapper") + private MngrManagerMapper mngrManagerMapper; + + @Resource(name="mngrAuthorityMapper") + private MngrAuthorityMapper mngrAuthorityMapper; + + /** MngrAuthorityService */ + @Resource(name = "mngrManagerLogService") + private MngrManagerLogService mngrManagerLogService; + /** + * 관리자 목록을 조회한다.(로그용) + * @param mngrManagerSearchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + public List selectMngrManagerList(MngrManagerSearchVO mngrManagerSearchVO) throws IOException, SQLException { + return mngrManagerMapper.mngrManagerList(mngrManagerSearchVO); + } + + /** + * 관리자 목록을 조회한다.(모듈용) + * @param mngrManagerSearchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + public List mMngrManagerList(MngrManagerSearchVO mngrManagerSearchVO) throws IOException, SQLException { + return mngrManagerMapper.mngrManagerList(mngrManagerSearchVO); + } + + /** + * 글 총 갯수를 조회한다. + * @param mngrManagerSearchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + public int mngrManagerListTotCnt(MngrManagerSearchVO mngrManagerSearchVO) throws IOException, SQLException { + return mngrManagerMapper.mngrManagerListTotCnt(mngrManagerSearchVO); + } + + public void mngrManagerRegistProc(MngrManagerVO mngrManagerVO) throws IOException, SQLException { + mngrManagerMapper.mngrManagerRegistProc(mngrManagerVO); + + if("0".equals(CommUtil.isNull(mngrManagerVO.getAuthIdx(), ""))){// 권한이 직접등록(0)이면 권한메뉴 등록 + String[] arrCodes = mngrManagerVO.getMenuCodes().split(","); + + MngrAuthorityVO mngrAuthorityVO = new MngrAuthorityVO(); + mngrAuthorityVO.setRoleIdx("0"); // 롤 인덱스를 0으로 설정 + mngrAuthorityVO.setAuthType("0"); // 롤권한이 없음 + mngrAuthorityVO.setMngId(mngrManagerVO.getMngId()); + + mngrAuthorityVO.setRegmemid(CommUtil.getMngrMemId()); + for(int i = 0; i < arrCodes.length; i++){ + mngrAuthorityVO.setMenuCode(arrCodes[i]); + mngrAuthorityMapper.mngrAuthorityRegist(mngrAuthorityVO); + } + } + } + + /** + * 글을 조회한다. + * @param mngrManagerSearchVO - 조회할 정보가 담긴 searchVO + * @return 조회 결과 + * @exception Exception + */ + public MngrManagerVO mngrManagerView(MngrManagerSearchVO mngrManagerSearchVO) throws IOException, SQLException { + MngrManagerVO resultVO = mngrManagerMapper.mngrManagerView(mngrManagerSearchVO); + return resultVO; + } + + /** + * 권한리스트를 스트링형태로 가져온다. + * @param mngrManagerVO - mngType 정보가 들어있는 VO + * @return 조회 결과 + * @exception Exception + */ + public String mngrManagerCheckPower(MngrManagerVO mngrManagerVO) throws IOException, SQLException { + return mngrManagerMapper.mngrManagerCheckPower(mngrManagerVO); + } + + public String updateMngrManagerUpdateProc(MngrManagerVO mngrManagerVO) throws IOException, SQLException { + + MngrManagerVO beforeMngVO = mngrManagerMapper.mngrManagerView(mngrManagerVO); + mngrManagerMapper.mngrManagerUpdateProc(mngrManagerVO); + + String beforePowers = mngrManagerMapper.mngrManagerCheckPower(beforeMngVO); + String powers = mngrManagerMapper.mngrManagerCheckPower(mngrManagerVO); + if(!CommUtil.strInArrChk(beforePowers, "MEMBER_USER")){ // 권한이 바뀌기 전 개인정보 접근권한이 없었으나.. + if(CommUtil.strInArrChk(powers, "MEMBER_USER")){ // 신규 권한에 개인정보 접근권한이 발생할경우 로그에 기록한다. + MngrManagerLogVO mngrManagerLogVO = new MngrManagerLogVO(); + mngrManagerLogVO.setMlogClass("MngrManagerServiceImpl"); + mngrManagerLogVO.setMlogMethod("mngrManagerUpdateProc"); + mngrManagerLogVO.setMlogType("U"); + mngrManagerLogVO.setMngId(CommUtil.getMngrMemId()); + mngrManagerLogVO.setMngName(CommUtil.getMngrSessionVO().getName()); + mngrManagerLogVO.setMlogIp(CommUtil.getClientIP(request)); + mngrManagerLogVO.setMlogReferer(request.getHeader("REFERER")); + mngrManagerLogVO.setMlogPersonalinfo("1"); + + String url = request.getRequestURL().toString(); + if(url != null && request.getQueryString() != null){ + url += "?" + request.getQueryString(); + } + mngrManagerLogVO.setMlogUrl(url); + + if(!"".equals(CommUtil.getMngrMemId())){ //관리자 아이디가 없으면 로그저장 안함 + try { + mngrManagerLogService.mngrManagerLogInsert(mngrManagerLogVO); + } catch (SQLException e) { + LOGGER.error("예외 상황 발생"); + } + } + } + } + + if("0".equals(CommUtil.isNull(mngrManagerVO.getAuthIdx(), "")) && "N".equals(mngrManagerVO.getIsMyInfo())){// 권한이 직접등록(0)이면 권한메뉴 등록 + String[] arrCodes = mngrManagerVO.getMenuCodes().split(","); + + MngrAuthorityVO mngrAuthorityVO = new MngrAuthorityVO(); + mngrAuthorityVO.setAuthType("0"); // 롤권한이 없음 + mngrAuthorityVO.setMngId(mngrManagerVO.getId()); + + mngrAuthorityMapper.mngrAuthorityDelete(mngrAuthorityVO); //기존 메뉴 권한 삭제 + + mngrAuthorityVO.setRoleIdx("0");//삭제 명령 전에 설정되면 전체가 삭제될수있음 + mngrAuthorityVO.setRegmemid(CommUtil.getMngrMemId()); + for(int i = 0; i < arrCodes.length; i++){ + mngrAuthorityVO.setMenuCode(arrCodes[i]); + mngrAuthorityMapper.mngrAuthorityRegist(mngrAuthorityVO); + } + } + return ""; + } + + public void mngrManagerDelProc(MngrManagerVO mngrManagerVO) throws IOException, SQLException { + MngrAuthorityVO mngrAuthorityVO = new MngrAuthorityVO(); + mngrAuthorityVO.setAuthType("0"); // 롤권한이 없음 + mngrAuthorityVO.setMngId(mngrManagerVO.getId()); + mngrAuthorityMapper.mngrAuthorityDelete(mngrAuthorityVO); //기존 메뉴 권한 삭제 + mngrManagerMapper.mngrManagerDelProc(mngrManagerVO); + } + + @Override + public void mngrManagerChkDelProc(MngrManagerVO mngrManagerVO) throws IOException, SQLException { + MngrAuthorityVO mngrAuthorityVO = new MngrAuthorityVO(); + mngrAuthorityVO.setAuthType("0"); // 롤권한이 없음 + mngrAuthorityVO.setChkId(mngrManagerVO.getChkId()); + mngrAuthorityMapper.mngrAuthorityChkDelete(mngrAuthorityVO); //기존 메뉴 권한 삭제 + mngrManagerMapper.mngrManagerChkDelProc(mngrManagerVO); + } + + @Override + public int mngrManagerCheckId(MngrManagerSearchVO mngrManagerSearchVO) + throws IOException, SQLException { + return mngrManagerMapper.mngrManagerCheckId(mngrManagerSearchVO); + } + + @Override + public void mngrManagerInitPass(MngrManagerVO managerVO) throws IOException, SQLException { + mngrManagerMapper.mngrManagerInitPass(managerVO); + } + + @Override + public void increaseMngPassTryCnt(MngrManagerVO managerVO) throws IOException, SQLException { + mngrManagerMapper.increaseMngPassTryCnt(managerVO); + } + + @Override + public List mngrManagerListAjax(MngrManagerSearchVO mngrManagerSearchVO) throws IOException, SQLException { + return mngrManagerMapper.mngrManagerListAjax(mngrManagerSearchVO); + } + + @Override + public List mngrManagerAuthListAjax(String authIdx) throws IOException, SQLException { + return mngrManagerMapper.mngrManagerAuthListAjax(authIdx); + } + + @Override + public List mngrManagerAuthPowerListAjax(String powerCode) throws IOException, SQLException { + return mngrManagerMapper.mngrManagerAuthPowerListAjax(powerCode); + } + + @Override + public void mngrManagerLoginLogInsert(MngrManagerLoginLogVO mngrManagerLoginLogVO) throws IOException, SQLException { + mngrManagerMapper.mngrManagerLoginLogInsert(mngrManagerLoginLogVO); + } + + @Override + public List mngrManagerLoginLogAjax(String log_id) throws IOException, SQLException { + return mngrManagerMapper.mngrManagerLoginLogAjax(log_id); + } + + @Override + public List mngrManagerLoginLogList(MngrManagerLoginLogSearchVO mngrManagerLoginLogSearchVO) throws IOException, SQLException { + return mngrManagerMapper.mngrManagerLoginLogList(mngrManagerLoginLogSearchVO); + } + + @Override + public int mngrManagerLoginLogListTotCnt(MngrManagerLoginLogSearchVO mngrManagerLoginLogSearchVO) throws IOException, SQLException { + return mngrManagerMapper.mngrManagerLoginLogListTotCnt(mngrManagerLoginLogSearchVO); + } + + @Override + public void mngrManagerLoginLogDelProc(MngrManagerLoginLogSearchVO mngrManagerLoginLogSearchVO) throws IOException, SQLException { + mngrManagerMapper.mngrManagerLoginLogDelProc(mngrManagerLoginLogSearchVO); + } + + @Override + public String chkPassBfView(String mngrId) throws IOException, SQLException { + return mngrManagerMapper.mngrChkPassBfView(mngrId); + } + + @Override + public int mngrCntIp(String userIp) throws IOException, SQLException { + return mngrManagerMapper.mngrCntIp(userIp); + } +} diff --git a/src/main/java/egovframework/itgcms/core/managerlog/service/MngrManagerLogSearchVO.java b/src/main/java/egovframework/itgcms/core/managerlog/service/MngrManagerLogSearchVO.java new file mode 100644 index 0000000..80011f1 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/managerlog/service/MngrManagerLogSearchVO.java @@ -0,0 +1,73 @@ +package egovframework.itgcms.core.managerlog.service; + +import java.io.UnsupportedEncodingException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO;; + +public class MngrManagerLogSearchVO extends DefaultVO { + /** + * + */ + private static final long serialVersionUID = 5358593433818756365L; + private static final Logger logger = LogManager.getLogger(MngrManagerLogSearchVO.class); + + /** 관리자 아이디 */ + String id = ""; //검색조건 유지 + + String query = ""; + + String schSdt = ""; //기간검색 시작일 + String schEdt = ""; //기간검색 종료일 + String schType = ""; //작업구분 + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + + + public String getSchSdt() { + return schSdt; + } + + public void setSchSdt(String schSdt) { + this.schSdt = schSdt; + } + + public String getSchEdt() { + return schEdt; + } + + public void setSchEdt(String schEdt) { + this.schEdt = schEdt; + } + + + public String getSchType() { + return schType; + } + + public void setSchType(String schType) { + this.schType = schType; + } + + public String getQuery() { + String query = super.queryString(); + try{ + query += "&id=" + java.net.URLEncoder.encode(this.id, "UTF-8"); + query += "&schSdt=" + java.net.URLEncoder.encode(this.schSdt, "UTF-8"); + query += "&schEdt=" + java.net.URLEncoder.encode(this.schEdt, "UTF-8"); + query += "&schType=" + java.net.URLEncoder.encode(this.schType, "UTF-8"); + }catch(UnsupportedEncodingException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/managerlog/service/MngrManagerLogService.java b/src/main/java/egovframework/itgcms/core/managerlog/service/MngrManagerLogService.java new file mode 100644 index 0000000..71d23d8 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/managerlog/service/MngrManagerLogService.java @@ -0,0 +1,45 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.managerlog.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +/** + * @파일명 : MngrManagerLogService.java + * @파일정보 : 관리자 작업 로그 관리 서비스 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface MngrManagerLogService { + + void mngrManagerLogInsert(MngrManagerLogVO mngrManagerLogVO) throws IOException, SQLException; + + List mngrManagerLogList(MngrManagerLogSearchVO mngrManagerLogSearchVO) throws IOException, SQLException; + + int mngrManagerLogListTotCnt(MngrManagerLogSearchVO mngrManagerLogSearchVO) throws IOException, SQLException; + + void mngrManagerLogDelProc(MngrManagerLogSearchVO mngrManagerSearchVO) throws IOException, SQLException; + + +} diff --git a/src/main/java/egovframework/itgcms/core/managerlog/service/MngrManagerLogVO.java b/src/main/java/egovframework/itgcms/core/managerlog/service/MngrManagerLogVO.java new file mode 100644 index 0000000..7c95f30 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/managerlog/service/MngrManagerLogVO.java @@ -0,0 +1,88 @@ +package egovframework.itgcms.core.managerlog.service; + + +public class MngrManagerLogVO extends MngrManagerLogSearchVO{ + + private static final long serialVersionUID = -2482004560702363447L; + + String mlogRegdt = ""; + String mlogClass = ""; + String mlogMethod = ""; + String mlogType = ""; + String mngId = ""; + String mngName = ""; + String mlogIp = ""; + String mlogUrl = ""; + String mlogReferer = ""; + String mlogPersonalinfo = ""; + String mlogTypeName = ""; + + public String getMlogRegdt() { + return mlogRegdt; + } + public void setMlogRegdt(String mlogRegdt) { + this.mlogRegdt = mlogRegdt; + } + public String getMlogClass() { + return mlogClass; + } + public void setMlogClass(String mlogClass) { + this.mlogClass = mlogClass; + } + public String getMlogMethod() { + return mlogMethod; + } + public void setMlogMethod(String mlogMethod) { + this.mlogMethod = mlogMethod; + } + public String getMlogType() { + return mlogType; + } + public void setMlogType(String mlogType) { + this.mlogType = mlogType; + } + public String getMngId() { + return mngId; + } + public void setMngId(String mngId) { + this.mngId = mngId; + } + public String getMngName() { + return mngName; + } + public void setMngName(String mngName) { + this.mngName = mngName; + } + public String getMlogIp() { + return mlogIp; + } + public void setMlogIp(String mlogIp) { + this.mlogIp = mlogIp; + } + public String getMlogUrl() { + return mlogUrl; + } + public void setMlogUrl(String mlogUrl) { + this.mlogUrl = mlogUrl; + } + public String getMlogReferer() { + return mlogReferer; + } + public void setMlogReferer(String mlogReferer) { + this.mlogReferer = mlogReferer; + } + public String getMlogPersonalinfo() { + return mlogPersonalinfo; + } + public void setMlogPersonalinfo(String mlogPersonalinfo) { + this.mlogPersonalinfo = mlogPersonalinfo; + } + public String getMlogTypeName() { + return mlogTypeName; + } + public void setMlogTypeName(String mlogTypeName) { + this.mlogTypeName = mlogTypeName; + } + + +} diff --git a/src/main/java/egovframework/itgcms/core/managerlog/service/impl/MngrManagerLogMapper.java b/src/main/java/egovframework/itgcms/core/managerlog/service/impl/MngrManagerLogMapper.java new file mode 100644 index 0000000..0526f83 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/managerlog/service/impl/MngrManagerLogMapper.java @@ -0,0 +1,51 @@ +/* + * Copyright 2011 MOPAS(Ministry of Public Mngristration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.managerlog.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.itgcms.core.managerlog.service.MngrManagerLogSearchVO; +import egovframework.itgcms.core.managerlog.service.MngrManagerLogVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +/** + * managerLog 에 관한 데이터처리 매퍼 클래스 + * + * @author 표준프레임워크센터 + * @since 2014.01.24 + * @version 1.0 + * @see
    + *  == 개정이력(Modification Information) ==
    + *
    + *          수정일          수정자           수정내용
    + *  ----------------    ------------    ---------------------------
    + *   2014.01.24        표준프레임워크센터          최초 생성
    + *
    + * 
    + */ +@Mapper("mngrManagerLogMapper") +public interface MngrManagerLogMapper { + + void mngrManagerLogInsert(MngrManagerLogVO mngrManagerLogVO) throws SQLException; + + List mngrManagerLogList(MngrManagerLogSearchVO mngrManagerLogSearchVO) throws SQLException; + + int mngrManagerLogListTotCnt(MngrManagerLogSearchVO mngrManagerLogSearchVO) throws SQLException; + + void mngrManagerLogDelProc(MngrManagerLogSearchVO mngrManagerSearchVO) throws SQLException; + +} diff --git a/src/main/java/egovframework/itgcms/core/managerlog/service/impl/MngrManagerLogServiceImpl.java b/src/main/java/egovframework/itgcms/core/managerlog/service/impl/MngrManagerLogServiceImpl.java new file mode 100644 index 0000000..78869af --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/managerlog/service/impl/MngrManagerLogServiceImpl.java @@ -0,0 +1,92 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.managerlog.service.impl; + +import java.io.IOException; +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.itgcms.core.managerlog.service.MngrManagerLogSearchVO; +import egovframework.itgcms.core.managerlog.service.MngrManagerLogService; +import egovframework.itgcms.core.managerlog.service.MngrManagerLogVO; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * @파일명 : ManagerLogServiceImpl.java + * @파일정보 : 관리자 작업 로그 관리 서비스 구현 클래스 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Service("mngrManagerLogService") +public class MngrManagerLogServiceImpl extends EgovAbstractServiceImpl implements MngrManagerLogService { + + private static final Logger LOGGER = LoggerFactory.getLogger(MngrManagerLogServiceImpl.class); + + /** ManagerDAO */ + // ibatis 사용 + /*@Resource(name="ManagerDAO") + private ManagerDAO managerDAO;*/ + // mybatis 사용 + @Resource(name="mngrManagerLogMapper") + private MngrManagerLogMapper mngrManagerLogMapper; + + @Override + public List mngrManagerLogList( + MngrManagerLogSearchVO mngrManagerLogSearchVO) throws IOException, SQLException { + return mngrManagerLogMapper.mngrManagerLogList(mngrManagerLogSearchVO); + } + + + + @Override + public int mngrManagerLogListTotCnt( + MngrManagerLogSearchVO mngrManagerLogSearchVO) throws IOException, SQLException { + return mngrManagerLogMapper.mngrManagerLogListTotCnt(mngrManagerLogSearchVO); + } + + + + @Override + public void mngrManagerLogDelProc(MngrManagerLogSearchVO mngrManagerSearchVO) + throws IOException, SQLException { + mngrManagerLogMapper.mngrManagerLogDelProc(mngrManagerSearchVO); + } + + + + @Override + public void mngrManagerLogInsert(MngrManagerLogVO mngrManagerLogVO) + throws IOException, SQLException { + mngrManagerLogMapper.mngrManagerLogInsert(mngrManagerLogVO); + } + + + + +} diff --git a/src/main/java/egovframework/itgcms/core/member/service/MemberSearchVO.java b/src/main/java/egovframework/itgcms/core/member/service/MemberSearchVO.java new file mode 100644 index 0000000..e0b7a74 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/member/service/MemberSearchVO.java @@ -0,0 +1,46 @@ +package egovframework.itgcms.core.member.service; + +import java.io.UnsupportedEncodingException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO; + +public class MemberSearchVO extends DefaultVO { + + private static final long serialVersionUID = 6412434968800868562L; + private static final Logger logger = LogManager.getLogger(MemberSearchVO.class); + + /** 회원 구분 **/ + private String schFldSub = ""; + private String schExcel = "N"; + + public String getSchFldSub() { + return schFldSub; + } + + public void setSchFldSub(String schFldSub) { + this.schFldSub = schFldSub; + } + + public String getSchExcel() { + return schExcel; + } + + public void setSchExcel(String schExcel) { + this.schExcel = schExcel; + } + + public String getSubQueryString() { + String query = super.queryString(); + try { + query += "&schFldSub=" + java.net.URLEncoder.encode(this.schFldSub, "UTF-8"); + query += "&schExcel=" + java.net.URLEncoder.encode(this.schFldSub, "UTF-8"); + } + catch(UnsupportedEncodingException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/member/service/MemberVO.java b/src/main/java/egovframework/itgcms/core/member/service/MemberVO.java new file mode 100644 index 0000000..8b9e184 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/member/service/MemberVO.java @@ -0,0 +1,760 @@ +package egovframework.itgcms.core.member.service; + +import java.io.UnsupportedEncodingException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class MemberVO extends MemberSearchVO { + + private static final long serialVersionUID = 1121693225306620202L; + private static final Logger logger = LogManager.getLogger(MemberVO.class); + + /** 회원아이디 **/ + private String id = ""; + /** 이름 **/ + private String name; + /** 닉네임 **/ + private String nickName; + /** 비밀번호 **/ + private String pass; + /** 비밀번호 확인 **/ + private String pass2; + /** 비밀번호수정일 **/ + private String passDt; + /** 비밀번호오류횟수 **/ + private String passTryCnt; + /** 전화번호 **/ + private String phone; + /** 휴대전화 **/ + private String mobile; + /** 이메일 **/ + private String email; + /** 팩스 **/ + private String fax; + /** 구 우편번호 **/ + private String oldPost; + /** 구 주소 **/ + private String oldAddr1; + /** 구 주소 상세 **/ + private String oldAddr2; + /** 신 우편번호 **/ + private String newPost; + /** 신 주소 **/ + private String newAddr1; + /** 신 주소 상세 **/ + private String newAddr2; + /** 생년월일 **/ + private String birth; + /** 성별 **/ + private String sex; + /** 회원타입 **/ + private String type; + /** 회원그룹 **/ + private String group; + /** 회원코드 **/ + private String code; + /** 로그인아이피 **/ + private String loginIp; + /** 로그인일자 **/ + private String loginDt; + /** 접속 국가코드 **/ + private String loginCountryCd; + /** 접속 국가명 **/ + private String loginCountryName; + /** 접속 브라우져 **/ + private String loginBrowser; + /** 접속 브라우져 ICON **/ + private String loginBrowserIcon; + /** 접속 OS **/ + private String loginOs; + /** 접속 OS ICON **/ + private String loginOsIcon; + /** 가입자아이디 **/ + private String regId; + /** 가입아이피 **/ + private String regIp; + /** 가입일자 **/ + private String regDt; + /** 가입 국가코드 **/ + private String regCountryCd; + /** 가입 국가명 **/ + private String regCountryName; + /** 가입 브라우져 **/ + private String regBrowser; + /** 가입 브라우져 ICON **/ + private String regBrowserIcon; + /** 가입 OS **/ + private String regOs; + /** 가입 OS ICON **/ + private String regOsIcon; + /** 수정자아이디 **/ + private String updId; + /** 수정자아이피 **/ + private String updIp; + /** 수정일 **/ + private String updDt; + /** 회원상태 **/ + private String status; + /** 삭제자아이디 **/ + private String delId; + /** 삭제자아이피 **/ + private String delIp; + /** 삭제일 **/ + private String delDt; + /** 차단일자 **/ + private String cutoffDt; + /** 차단사유 **/ + private String cutoffReason; + /** 문자수신여부 **/ + private String smsYn; + /** 이메일수신여부 **/ + private String emailYn; + /** 정보공개허용여부 **/ + private String infoOpenYn = "N"; + /** 캅차 **/ + private String captcha; + /** 회사명 **/ + private String company; + /** 회사명 **/ + private String comTel; + /* 가입한 사이트 코드 */ + private String regSiteCode; + + private String comemIdx; + + /* 통합 회원 여부 */ + private boolean unionMem = true; + + private String phone1 = ""; + private String phone2 = ""; + private String phone3 = ""; + + private String mobile1 = ""; + private String mobile2 = ""; + private String mobile3 = ""; + + private String email1 = ""; + private String email2 = ""; + + private String fax1 = ""; + private String fax2 = ""; + private String fax3 = ""; + + private String year = ""; + private String month = ""; + private String date = ""; + + private String position; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getPass() { + return pass; + } + + public void setPass(String pass) { + this.pass = pass; + } + + public String getPassDt() { + return passDt; + } + + public String getPass2() { + return pass2; + } + + public void setPass2(String pass2) { + this.pass2 = pass2; + } + + public void setPassDt(String passDt) { + this.passDt = passDt; + } + + public String getPassTryCnt() { + return passTryCnt; + } + + public void setPassTryCnt(String passTryCnt) { + this.passTryCnt = passTryCnt; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + String phoneArr[] = phone.split("-"); + if (phoneArr != null && phoneArr.length==3) { + this.phone1 = phoneArr[0]; + this.phone2 = phoneArr[1]; + this.phone3 = phoneArr[2]; + } + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + String mobileArr[] = mobile.split("-"); + if (mobileArr!= null && mobileArr.length==3) { + this.mobile1 = mobileArr[0]; + this.mobile2 = mobileArr[1]; + this.mobile3 = mobileArr[2]; + } + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + String[] emailArr = email.split("@"); + if (emailArr != null && emailArr.length==2) { + email1 = emailArr[0]; + email2 = emailArr[1]; + } + } + + public String getFax() { + return fax; + } + + public void setFax(String fax) { + this.fax = fax; + String faxArr[] = fax.split("-"); + if (faxArr != null && faxArr.length == 3) { + fax1 = faxArr[0]; + fax2 = faxArr[1]; + fax3 = faxArr[2]; + } + } + + public String getOldPost() { + return oldPost; + } + + public void setOldPost(String oldPost) { + this.oldPost = oldPost; + } + + public String getOldAddr1() { + return oldAddr1; + } + + public void setOldAddr1(String oldAddr1) { + this.oldAddr1 = oldAddr1; + } + + public String getOldAddr2() { + return oldAddr2; + } + + public void setOldAddr2(String oldAddr2) { + this.oldAddr2 = oldAddr2; + } + + public String getNewPost() { + return newPost; + } + + public void setNewPost(String newPost) { + this.newPost = newPost; + } + + public String getNewAddr1() { + return newAddr1; + } + + public void setNewAddr1(String newAddr1) { + this.newAddr1 = newAddr1; + } + + public String getNewAddr2() { + return newAddr2; + } + + public void setNewAddr2(String newAddr2) { + this.newAddr2 = newAddr2; + } + + public String getBirth() { + return birth; + } + + public void setBirth(String birth) { + if(birth != null) { + String[] birthArr = birth.split("-"); + if (birthArr.length == 3) { + this.year = birthArr[0]; + this.month = birthArr[1]; + this.date = birthArr[2]; + } + } + + this.birth = birth; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getGroup() { + return group; + } + + public void setGroup(String group) { + this.group = group; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getLoginIp() { + return loginIp; + } + + public void setLoginIp(String loginIp) { + this.loginIp = loginIp; + } + + public String getLoginDt() { + return loginDt; + } + + public void setLoginDt(String loginDt) { + this.loginDt = loginDt; + } + + public String getLoginCountryCd() { + return loginCountryCd; + } + + public void setLoginCountryCd(String loginCountryCd) { + this.loginCountryCd = loginCountryCd; + } + + public String getLoginCountryName() { + return loginCountryName; + } + + public void setLoginCountryName(String loginCountryName) { + this.loginCountryName = loginCountryName; + } + + public String getLoginBrowser() { + return loginBrowser; + } + + public void setLoginBrowser(String loginBrowser) { + this.loginBrowser = loginBrowser; + } + + public String getLoginBrowserIcon() { + return loginBrowserIcon; + } + + public void setLoginBrowserIcon(String loginBrowserIcon) { + this.loginBrowserIcon = loginBrowserIcon; + } + + public String getLoginOs() { + return loginOs; + } + + public void setLoginOs(String loginOs) { + this.loginOs = loginOs; + } + + public String getLoginOsIcon() { + return loginOsIcon; + } + + public void setLoginOsIcon(String loginOsIcon) { + this.loginOsIcon = loginOsIcon; + } + + public String getRegId() { + return regId; + } + + public void setRegId(String regId) { + this.regId = regId; + } + + public String getRegIp() { + return regIp; + } + + public void setRegIp(String regIp) { + this.regIp = regIp; + } + + public String getRegDt() { + return regDt; + } + + public void setRegDt(String regDt) { + this.regDt = regDt; + } + + public String getRegCountryCd() { + return regCountryCd; + } + + public void setRegCountryCd(String regCountryCd) { + this.regCountryCd = regCountryCd; + } + + public String getRegCountryName() { + return regCountryName; + } + + public void setRegCountryName(String regCountryName) { + this.regCountryName = regCountryName; + } + + public String getRegBrowser() { + return regBrowser; + } + + public void setRegBrowser(String regBrowser) { + this.regBrowser = regBrowser; + } + + public String getRegBrowserIcon() { + return regBrowserIcon; + } + + public void setRegBrowserIcon(String regBrowserIcon) { + this.regBrowserIcon = regBrowserIcon; + } + + public String getRegOs() { + return regOs; + } + + public void setRegOs(String regOs) { + this.regOs = regOs; + } + + public String getRegOsIcon() { + return regOsIcon; + } + + public void setRegOsIcon(String regOsIcon) { + this.regOsIcon = regOsIcon; + } + + public String getUpdId() { + return updId; + } + + public void setUpdId(String updId) { + this.updId = updId; + } + + public String getUpdIp() { + return updIp; + } + + public void setUpdIp(String updIp) { + this.updIp = updIp; + } + + public String getUpdDt() { + return updDt; + } + + public void setUpdDt(String updDt) { + this.updDt = updDt; + } + + public String getDelId() { + return delId; + } + + public void setDelId(String delId) { + this.delId = delId; + } + + public String getDelIp() { + return delIp; + } + + public void setDelIp(String delIp) { + this.delIp = delIp; + } + + public String getDelDt() { + return delDt; + } + + public void setDelDt(String delDt) { + this.delDt = delDt; + } + + public String getCutoffDt() { + return cutoffDt; + } + + public void setCutoffDt(String cutoffDt) { + this.cutoffDt = cutoffDt; + } + + public String getCutoffReason() { + return cutoffReason; + } + + public void setCutoffReason(String cutoffReason) { + this.cutoffReason = cutoffReason; + } + + public String getSmsYn() { + return smsYn; + } + + public void setSmsYn(String smsYn) { + this.smsYn = smsYn; + } + + public String getEmailYn() { + return emailYn; + } + + public void setEmailYn(String emailYn) { + this.emailYn = emailYn; + } + + public String getInfoOpenYn() { + return infoOpenYn; + } + + public void setInfoOpenYn(String infoOpenYn) { + this.infoOpenYn = infoOpenYn; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getCaptcha() { + return captcha; + } + + public void setCaptcha(String captcha) { + this.captcha = captcha; + } + + public String getCompany() { + return company; + } + + public void setCompany(String company) { + this.company = company; + } + + public String getComTel() { + return comTel; + } + + public void setComTel(String comTel) { + this.comTel = comTel; + } + + public String getQuery() { + String query = super.getSubQueryString(); + try { + query += "&id=" + java.net.URLEncoder.encode(id, "UTF-8"); + } + catch(UnsupportedEncodingException e){ + logger.error("예외 상황 발생"); + } + return query; + } + public void setRegSiteCode(String regSiteCode) { + this.regSiteCode = regSiteCode; + } + public String getRegSiteCode() { + return regSiteCode; + } + public void setUnionMem(boolean unionMem) { + this.unionMem = unionMem; + } + public boolean isUnionMem() { + return unionMem; + } + + public String getPhone1() { + return phone1; + } + + public void setPhone1(String phone1) { + this.phone1 = phone1; + } + + public String getPhone2() { + return phone2; + } + + public void setPhone2(String phone2) { + this.phone2 = phone2; + } + + public String getPhone3() { + return phone3; + } + + public void setPhone3(String phone3) { + this.phone3 = phone3; + } + + public String getMobile1() { + return mobile1; + } + + public void setMobile1(String mobile1) { + this.mobile1 = mobile1; + } + + public String getMobile2() { + return mobile2; + } + + public void setMobile2(String mobile2) { + this.mobile2 = mobile2; + } + + public String getMobile3() { + return mobile3; + } + + public void setMobile3(String mobile3) { + this.mobile3 = mobile3; + } + + public String getEmail1() { + return email1; + } + + public void setEmail1(String email1) { + this.email1 = email1; + } + + public String getEmail2() { + return email2; + } + + public void setEmail2(String email2) { + this.email2 = email2; + } + + public String getFax1() { + return fax1; + } + + public void setFax1(String fax1) { + this.fax1 = fax1; + } + + public String getFax2() { + return fax2; + } + + public void setFax2(String fax2) { + this.fax2 = fax2; + } + + public String getFax3() { + return fax3; + } + + public void setFax3(String fax3) { + this.fax3 = fax3; + } + + public String getYear() { + return year; + } + + public void setYear(String year) { + this.year = year; + } + + public String getMonth() { + return month; + } + + public void setMonth(String month) { + this.month = month; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + public void setComemIdx(String comemIdx) { + this.comemIdx = comemIdx; + } + public String getComemIdx() { + return comemIdx; + } + public void setPosition(String position) { + this.position = position; + } + public String getPosition() { + return position; + } +} diff --git a/src/main/java/egovframework/itgcms/core/member/service/MngrMemberExcelView.java b/src/main/java/egovframework/itgcms/core/member/service/MngrMemberExcelView.java new file mode 100644 index 0000000..c22f2ee --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/member/service/MngrMemberExcelView.java @@ -0,0 +1,417 @@ +package egovframework.itgcms.core.member.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFDataFormat; +import org.apache.poi.hssf.usermodel.HSSFFont; +import org.apache.poi.hssf.usermodel.HSSFRichTextString; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.hssf.util.HSSFColor; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.view.document.AbstractExcelView; + +/** + * @파일명 : MngrMemberExcelView.java + * @파일정보 : 회원 정보 엑셀다운로드 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +@Component("mngrMemberExcelView") +public class MngrMemberExcelView extends AbstractExcelView { + + @Override + protected void buildExcelDocument(Map map, HSSFWorkbook hssfWorkbook, HttpServletRequest httpServletRequest, + HttpServletResponse httpServletResponse) throws IOException, SQLException { + + List resultList = (List) map.get("resultList"); + + HSSFFont font = hssfWorkbook.createFont(); + font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); + + HSSFCellStyle cellStyle = hssfWorkbook.createCellStyle(); + cellStyle.setFillForegroundColor(HSSFColor.YELLOW.index); + cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); + cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); + cellStyle.setBorderTop((short) 1); + cellStyle.setBorderBottom((short) 1); + cellStyle.setBorderLeft((short) 1); + cellStyle.setBorderRight((short) 1); + cellStyle.setFont(font); + + HSSFCellStyle cellStyle2 = hssfWorkbook.createCellStyle(); + cellStyle2.setBorderTop((short) 1); + cellStyle2.setBorderBottom((short) 1); + cellStyle2.setBorderLeft((short) 1); + cellStyle2.setBorderRight((short) 1); + + HSSFCellStyle cellStyle3 = hssfWorkbook.createCellStyle(); + cellStyle3.setAlignment(HSSFCellStyle.ALIGN_CENTER); + cellStyle3.setBorderTop((short) 1); + cellStyle3.setBorderBottom((short) 1); + cellStyle3.setBorderLeft((short) 1); + cellStyle3.setBorderRight((short) 1); + cellStyle3.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")); + + HSSFCellStyle cellStyle4 = hssfWorkbook.createCellStyle(); + cellStyle4.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + cellStyle4.setBorderTop((short) 1); + cellStyle4.setBorderBottom((short) 1); + cellStyle4.setBorderLeft((short) 1); + cellStyle4.setBorderRight((short) 1); + cellStyle4.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0")); + + HSSFCellStyle cellStyle5 = hssfWorkbook.createCellStyle(); + cellStyle5.setAlignment(HSSFCellStyle.ALIGN_CENTER); + cellStyle5.setBorderTop((short) 1); + cellStyle5.setBorderBottom((short) 1); + cellStyle5.setBorderLeft((short) 1); + cellStyle5.setBorderRight((short) 1); + + HSSFSheet sheet = hssfWorkbook.createSheet("회원정보"); + HSSFRow header = sheet.createRow(0); + + HSSFCell hcell0 = header.createCell(0); + hcell0.setCellValue(new HSSFRichTextString("아이디")); + hcell0.setCellStyle(cellStyle); + + HSSFCell hcell1 = header.createCell(1); + hcell1.setCellValue(new HSSFRichTextString("이름")); + hcell1.setCellStyle(cellStyle); + + HSSFCell hcell2 = header.createCell(2); + hcell2.setCellValue(new HSSFRichTextString("닉네임")); + hcell2.setCellStyle(cellStyle); + + HSSFCell hcell3 = header.createCell(3); + hcell3.setCellValue(new HSSFRichTextString("전화")); + hcell3.setCellStyle(cellStyle); + + HSSFCell hcell4 = header.createCell(4); + hcell4.setCellValue(new HSSFRichTextString("휴대폰")); + hcell4.setCellStyle(cellStyle); + + HSSFCell hcell5 = header.createCell(5); + hcell5.setCellValue(new HSSFRichTextString("이메일")); + hcell5.setCellStyle(cellStyle); + + HSSFCell hcell6 = header.createCell(6); + hcell6.setCellValue(new HSSFRichTextString("팩스")); + hcell6.setCellStyle(cellStyle); + + HSSFCell hcell7 = header.createCell(7); + hcell7.setCellValue(new HSSFRichTextString("신 우편번호")); + hcell7.setCellStyle(cellStyle); + + HSSFCell hcell8 = header.createCell(8); + hcell8.setCellValue(new HSSFRichTextString("신 주소")); + hcell8.setCellStyle(cellStyle); + + HSSFCell hcell9 = header.createCell(9); + hcell9.setCellValue(new HSSFRichTextString("신 주소 상세")); + hcell9.setCellStyle(cellStyle); + + HSSFCell hcell10 = header.createCell(10); + hcell10.setCellValue(new HSSFRichTextString("구 우편번호")); + hcell10.setCellStyle(cellStyle); + + HSSFCell hcell11 = header.createCell(11); + hcell11.setCellValue(new HSSFRichTextString("구 주소")); + hcell11.setCellStyle(cellStyle); + + HSSFCell hcell12 = header.createCell(12); + hcell12.setCellValue(new HSSFRichTextString("구 주소 상세")); + hcell12.setCellStyle(cellStyle); + + HSSFCell hcell13 = header.createCell(13); + hcell13.setCellValue(new HSSFRichTextString("생년월일")); + hcell13.setCellStyle(cellStyle); + + HSSFCell hcell14 = header.createCell(14); + hcell14.setCellValue(new HSSFRichTextString("성별")); + hcell14.setCellStyle(cellStyle); + + HSSFCell hcell15 = header.createCell(15); + hcell15.setCellValue(new HSSFRichTextString("가입자아이디")); + hcell15.setCellStyle(cellStyle); + + HSSFCell hcell16 = header.createCell(16); + hcell16.setCellValue(new HSSFRichTextString("가입일")); + hcell16.setCellStyle(cellStyle); + + HSSFCell hcell17 = header.createCell(17); + hcell17.setCellValue(new HSSFRichTextString("가입아이피")); + hcell17.setCellStyle(cellStyle); + + HSSFCell hcell18 = header.createCell(18); + hcell18.setCellValue(new HSSFRichTextString("로그인일자")); + hcell18.setCellStyle(cellStyle); + + HSSFCell hcell19 = header.createCell(19); + hcell19.setCellValue(new HSSFRichTextString("로그인아이피")); + hcell19.setCellStyle(cellStyle); + + HSSFCell hcell20 = header.createCell(20); + hcell20.setCellValue(new HSSFRichTextString("로그인국가")); + hcell20.setCellStyle(cellStyle); + + HSSFCell hcell21 = header.createCell(21); + hcell21.setCellValue(new HSSFRichTextString("로그인브라우져")); + hcell21.setCellStyle(cellStyle); + + HSSFCell hcell22 = header.createCell(22); + hcell22.setCellValue(new HSSFRichTextString("로그인OS")); + hcell22.setCellStyle(cellStyle); + + HSSFCell hcell23 = header.createCell(23); + hcell23.setCellValue(new HSSFRichTextString("수정자아이디")); + hcell23.setCellStyle(cellStyle); + + HSSFCell hcell24 = header.createCell(24); + hcell24.setCellValue(new HSSFRichTextString("수정자일자")); + hcell24.setCellStyle(cellStyle); + + HSSFCell hcell25 = header.createCell(25); + hcell25.setCellValue(new HSSFRichTextString("수정자아이피")); + hcell25.setCellStyle(cellStyle); + + HSSFCell hcell26 = header.createCell(26); + hcell26.setCellValue(new HSSFRichTextString("회원상태")); + hcell26.setCellStyle(cellStyle); + + HSSFCell hcell27 = header.createCell(27); + hcell27.setCellValue(new HSSFRichTextString("차단일")); + hcell27.setCellStyle(cellStyle); + + HSSFCell hcell28 = header.createCell(28); + hcell28.setCellValue(new HSSFRichTextString("차단사유")); + hcell28.setCellStyle(cellStyle); + + HSSFCell hcell29 = header.createCell(29); + hcell29.setCellValue(new HSSFRichTextString("삭제아이디")); + hcell29.setCellStyle(cellStyle); + + HSSFCell hcell30 = header.createCell(30); + hcell30.setCellValue(new HSSFRichTextString("삭제일자")); + hcell30.setCellStyle(cellStyle); + + HSSFCell hcell31 = header.createCell(31); + hcell31.setCellValue(new HSSFRichTextString("삭제아이피")); + hcell31.setCellStyle(cellStyle); + + HSSFCell hcell32 = header.createCell(32); + hcell32.setCellValue(new HSSFRichTextString("SMS수신")); + hcell32.setCellStyle(cellStyle); + + HSSFCell hcell33 = header.createCell(33); + hcell33.setCellValue(new HSSFRichTextString("이메일수신")); + hcell33.setCellStyle(cellStyle); + + HSSFCell hcell34 = header.createCell(34); + hcell34.setCellValue(new HSSFRichTextString("정보공개")); + hcell34.setCellStyle(cellStyle); + + int rowNum = 1; + HSSFRow row; + HSSFCell cell; + for (MemberVO mngrMemberVO : resultList) { + //create the row data + row = sheet.createRow(rowNum++); + + cell = row.createCell(0); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getId())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(1); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getName())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(2); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getNickName())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(3); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getPhone())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(4); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getMobile())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(5); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getEmail())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(6); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getFax())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(7); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getNewPost())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(8); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getNewAddr1())); + cell.setCellStyle(cellStyle2); + + cell = row.createCell(9); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getNewAddr2())); + cell.setCellStyle(cellStyle2); + + cell = row.createCell(10); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getOldPost())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(11); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getOldAddr1())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(12); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getOldAddr2())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(13); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getBirth())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(14); + if ("M".equals(mngrMemberVO.getSex())) { + cell.setCellValue("남성"); + } + else { + cell.setCellValue("여성"); + } + cell.setCellStyle(cellStyle5); + + cell = row.createCell(15); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getRegId())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(16); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getRegDt())); + cell.setCellStyle(cellStyle3); + + cell = row.createCell(17); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getRegIp())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(18); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getLoginDt())); + cell.setCellStyle(cellStyle3); + + cell = row.createCell(19); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getLoginIp())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(20); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getLoginCountryName())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(21); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getLoginBrowser())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(22); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getLoginOs())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(23); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getUpdId())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(24); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getUpdDt())); + cell.setCellStyle(cellStyle3); + + cell = row.createCell(25); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getUpdIp())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(26); + if ("0".equals(mngrMemberVO.getStatus())) { + cell.setCellValue("정상"); + } + else if ("1".equals(mngrMemberVO.getStatus())) { + cell.setCellValue("차단"); + } + else if ("2".equals(mngrMemberVO.getStatus())) { + cell.setCellValue("탈퇴"); + } + cell.setCellStyle(cellStyle5); + + cell = row.createCell(27); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getCutoffDt())); + cell.setCellStyle(cellStyle3); + + cell = row.createCell(28); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getCutoffReason())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(29); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getDelId())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(30); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getDelDt())); + cell.setCellStyle(cellStyle3); + + cell = row.createCell(31); + cell.setCellValue(new HSSFRichTextString(mngrMemberVO.getDelIp())); + cell.setCellStyle(cellStyle5); + + cell = row.createCell(32); + if ("Y".equals(mngrMemberVO.getSmsYn())) { + cell.setCellValue("수신"); + } + else { + cell.setCellValue("수신거부"); + } + cell.setCellStyle(cellStyle5); + + cell = row.createCell(33); + if ("Y".equals(mngrMemberVO.getEmailYn())) { + cell.setCellValue("수신"); + } + else { + cell.setCellValue("수신거부"); + } + cell.setCellStyle(cellStyle5); + + cell = row.createCell(34); + if ("Y".equals(mngrMemberVO.getInfoOpenYn())) { + cell.setCellValue("공개"); + } + else { + cell.setCellValue("비공개"); + } + cell.setCellStyle(cellStyle5); + } + + //sheet.autoSizeColumn((short) 1); + + Date date = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); + String datetime = formatter.format(date); + String fileName = new String(("회원내역_" + datetime + ".xls").getBytes("KSC5601"), "8859_1"); + + httpServletResponse.setHeader("Content-Disposition", "attachment; filename=" + fileName); + } + +} diff --git a/src/main/java/egovframework/itgcms/core/member/service/del_MemberService.java b/src/main/java/egovframework/itgcms/core/member/service/del_MemberService.java new file mode 100644 index 0000000..ddeed37 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/member/service/del_MemberService.java @@ -0,0 +1,92 @@ +package egovframework.itgcms.core.member.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.ui.ModelMap; + +//import egovframework.itgcms.core.joinformconfig.service.MngrJoinFormConfigSearchVO; +//import egovframework.itgcms.core.systemconfig.service.SystemconfigVO; + +/** + * @파일명 : MemberService.java + * @파일정보 : 회원관리 서비스 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface del_MemberService { + +// List selectMemberList(MemberVO searchVO); +// +// MemberVO selectMember(MemberVO searchVO); +///* +// MemberVO selectMemberById(String id); +//*/ +// int mSelectMemberListTotCnt(MemberVO searchVO); +// +// int mSelectMemberCnt(MemberVO searchVO); +// +// void insertMemberRegist(MemberVO mngrMemberVO); +// +// void insertMemberMinRegist(MemberVO mngrMemberVO); +// +// MemberVO selectMemberView(MemberVO searchVO); +// +// +// +// void updateMemberInitPass(MemberVO mngrMemberVO); +// +// void updateMemberDel(MemberVO mngrMemberVO); +// +// void updateMemberChkDel(MemberVO mngrMemberVO); +// +// void updateMember(MemberVO mngrMemberVO); +// +// +// /** +// * 닉네임 유효성 검사 +// * @param searchVO +// * @param model +// * @param cnt +// * @return +// */ +// String selectMemberNickNameValidCheck(MemberVO searchVO, ModelMap model, int cnt); +// +// /** +// * 아이디 중복 검사 +// * @param searchVO +// * @return +// */ +// HashMap selectMemberIdDuplCheck(MemberVO searchVO); +// +// /** +// * 넥네임 중복 검사 +// * @param searchVO +// * @return +// */ +// HashMap selectMemberNickNameDuplCheck(MemberVO searchVO); +// +// /** +// * 로그인 처리 +// * @param memberVO +// * @return +// */ +// HashMap updateMemberLogin(MemberVO memberVO, String root, SystemconfigVO sysConf) ; +// +// int getMemberRegistCount(); +// +// Map memberRegistFormCheck(MemberVO memberVO, MngrJoinFormConfigSearchVO joinFormVO); +// +// int updateMemberPassword(MemberVO memberVO); +// +// void updateMemberTemporaryPass(MemberVO member); +} diff --git a/src/main/java/egovframework/itgcms/core/member/service/impl/MemberMapper.java b/src/main/java/egovframework/itgcms/core/member/service/impl/MemberMapper.java new file mode 100644 index 0000000..5638667 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/member/service/impl/MemberMapper.java @@ -0,0 +1,124 @@ +package egovframework.itgcms.core.member.service.impl; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.ibatis.annotations.Param; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +import egovframework.itgcms.core.authority.service.MngrPowerVO; +import egovframework.itgcms.core.member.service.MemberVO; + +@Mapper("memberMapper") +public interface MemberMapper { + + /** + * 회원 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + */ + List selectMemberList(MemberVO searchVO); + + /** + * 회원 조회. + * @param searchVO + * @return + */ + MemberVO selectMember(MemberVO searchVO); + + /** + * 회원 조회 아이디 + * @param id + * @return + */ + MemberVO selectMemberById(MemberVO searchVO); + + /** + * 총 회원수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + */ + int selectMemberListTotCnt(MemberVO searchVO); + + /** + * 회원수 조회 + * @param searchVO + * @return + */ + int selectMemberCnt(MemberVO searchVO); + + /** + * 아이디 중복 체크 + * @param searchVO + * @return + */ + int selectMemberUnionManagerById(String id); + + + /** + * 회원 등록 + * @param memberVO + */ + void insertMemberRegist(MemberVO memberVO); + + /** + * 회원 등록(최소정보:아이디만) + * @param memberVO + */ + void insertMemberMinRegist(MemberVO memberVO); + + /** + * 회원정보 상세 + * @param searchVO + */ + MemberVO selectMemberView(MemberVO searchVO); + + + + /** + * 회원비밀번호 초기화 + * @param memberVO + */ + void updateMemberInitPass(MemberVO memberVO); + + /** + * 회원정보 삭제 + * @param memberVO + */ + void updateMemberDel(MemberVO memberVO); + + /** + * 회원정보 일괄 삭제 + * @param memberVO + */ + void updateMemberChkDel(MemberVO memberVO); + + /** + * 회원정보 수정 + * @param memberVO + */ + void updateMember(MemberVO memberVO); + + /** + * 비밀번호 실패 횟수 + * @param id + */ + void updatePassTryCnt(String id); + + /** + * 로그인 처리 + * @param memberVO + */ + void updateMemberLogin(MemberVO memberVO); + + /** + * 차단처리 + * @param memberVO + */ + void updateMemberCufoff(MemberVO memberVO); + + int getMemberRegistCount(); + + int updateMemberPassword(MemberVO memberVO); +} diff --git a/src/main/java/egovframework/itgcms/core/member/service/impl/del_MemberServiceImpl.java b/src/main/java/egovframework/itgcms/core/member/service/impl/del_MemberServiceImpl.java new file mode 100644 index 0000000..72c50ab --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/member/service/impl/del_MemberServiceImpl.java @@ -0,0 +1,482 @@ +package egovframework.itgcms.core.member.service.impl; + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.sql.SQLException; +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.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.ui.ModelMap; + +import egovframework.com.cmm.service.IpCountryService; +import egovframework.com.cmm.service.IpCountryVO; +import egovframework.itgcms.common.UserSessionVO; +import egovframework.itgcms.core.joinformconfig.service.MngrJoinFormConfigSearchVO; +import egovframework.itgcms.core.manager.service.MngrManagerLoginLogVO; +import egovframework.itgcms.core.manager.service.MngrManagerService; +//import egovframework.itgcms.core.member.service.MemberService; +//import egovframework.itgcms.core.member.service.MemberVO; +//import egovframework.itgcms.core.systemconfig.service.SystemconfigVO; +import egovframework.itgcms.util.CommUtil; +import net.sf.uadetector.ReadableUserAgent; +import net.sf.uadetector.UserAgentStringParser; +import net.sf.uadetector.service.UADetectorServiceFactory; + +@Service("memberService") +public class del_MemberServiceImpl {// implements MemberService { + +// private static final Logger logger = LogManager.getLogger(MemberServiceImpl.class); +// +// @Resource(name = "memberMapper") +// private MemberMapper memberMapper; +// +// /** mngrManagerService */ +// @Resource(name = "mngrManagerService") +// protected MngrManagerService mngrManagerService; +// +// @Autowired +// private HttpServletRequest request; +// +// @Autowired +// private HttpSession session; +// +// @Resource(name = "ipCountryService") +// private IpCountryService ipCountryService; +// +// @Override +// public List selectMemberList(MemberVO searchVO) { +// return memberMapper.selectMemberList(searchVO); +// } +// +// @Override +// public MemberVO selectMember(MemberVO searchVO) { +// return memberMapper.selectMember(searchVO); +// } +///* +// @Override +// public MemberVO selectMemberById(String id) { +// return memberMapper.selectMemberById(id); +// } +//*/ +// @Override +// public int mSelectMemberListTotCnt(MemberVO searchVO) { +// return memberMapper.selectMemberListTotCnt(searchVO); +// } +// +// @Override +// public int mSelectMemberCnt(MemberVO searchVO) { +// return memberMapper.selectMemberCnt(searchVO); +// } +// +// @Override +// public void insertMemberRegist(MemberVO mngrMemberVO) { +// memberMapper.insertMemberRegist(mngrMemberVO); +// } +// +// @Override +// public void insertMemberMinRegist(MemberVO mngrMemberVO) { +// memberMapper.insertMemberMinRegist(mngrMemberVO); +// } +// +// @Override +// public MemberVO selectMemberView(MemberVO searchVO) { +// return memberMapper.selectMemberView(searchVO); +// } +// +// @Override +// public void updateMemberInitPass(MemberVO mngrMemberVO){ +// MemberVO memberVO = new MemberVO(); +// memberVO.setUpdId(CommUtil.getMngrMemId()); +//// memberVO.setPass(CommUtil.getPass(mngrMemberVO.getId())); +// try { +// memberVO.setPass(CommUtil.hexSha256(mngrMemberVO.getId())); +// } catch (NoSuchAlgorithmException e1) { +// logger.error("예외 상황 발생"); +// } catch (IOException e2) { +// logger.error("예외 상황 발생"); +// } +// memberVO.setUpdIp(CommUtil.getUserIP()); +// memberVO.setId(mngrMemberVO.getId()); +// +// memberMapper.updateMemberInitPass(memberVO); +// } +// +// @Override +// public void updateMemberDel(MemberVO mngrMemberVO) { +// MemberVO memberVO = new MemberVO(); +// memberVO.setDelId(CommUtil.getMngrMemId()); +// memberVO.setDelIp(CommUtil.getUserIP()); +// memberVO.setId(mngrMemberVO.getId()); +// +// memberMapper.updateMemberDel(memberVO); +// } +// +// @Override +// public void updateMemberChkDel(MemberVO mngrMemberVO) { +// MemberVO memberVO = new MemberVO(); +// memberVO.setDelId(CommUtil.getMngrMemId()); +// memberVO.setDelIp(CommUtil.getUserIP()); +// memberVO.setChkId(mngrMemberVO.getChkId()); +// +// memberMapper.updateMemberChkDel(memberVO); +// } +// +// @Override +// public void updateMember(MemberVO mngrMemberVO) { +// memberMapper.updateMember(mngrMemberVO); +// } +// +// @Override +// public String selectMemberNickNameValidCheck(MemberVO searchVO, ModelMap model, int cnt) { +// if (!"".equals(CommUtil.isNull(searchVO.getNickName(), ""))) { +// if (!CommUtil.regEx("^[가-힣a-zA-Z0-9]", searchVO.getId())) +// return CommUtil.doComplete(model, "오류", "한글, 영(대,소), 숫자로만 입력 해 주세요.", "history.back();"); +// +// //닉네임 중복 검사 +// MemberVO checkNickNameVO = new MemberVO(); +// checkNickNameVO.setId(searchVO.getNickName()); +// int resultNickCount = memberMapper.selectMemberCnt(checkNickNameVO); +// if (resultNickCount > cnt) +// return CommUtil.doComplete(model, "오류", "중복된 닉네임 입니다. 확인 후 다시 시도하세요.", "history.back();"); +// } +// return null; +// } +// +// @Override +// public HashMap selectMemberIdDuplCheck(MemberVO searchVO) { +// HashMap json = new HashMap<>(); +// json.put("result", "0"); +// json.put("message", "알수없는 오류가 발생했습니다. 다시 시도해 주세요."); +// +// if ("".equals(CommUtil.isNull(searchVO.getId(), ""))) { +// return json; +// } +// +// int resultCount = memberMapper.selectMemberUnionManagerById(searchVO.getId()); +// if (resultCount == 0) { +// json.put("result", "1"); +// json.put("message", "사용 가능한 아이디 입니다."); +// } +// else { +// json.put("result", "2"); +// json.put("message", "중복된 아이디 입니다."); +// } +// +// return json; +// } +// +// @Override +// public HashMap selectMemberNickNameDuplCheck(MemberVO searchVO) { +// HashMap json = new HashMap<>(); +// json.put("result", "0"); +// json.put("message", "알수없는 오류가 발생했습니다. 다시 시도해 주세요."); +// +// if ("".equals(CommUtil.isNull(searchVO.getNickName(), ""))) { +// return json; +// } +// +// int resultCount = memberMapper.selectMemberCnt(searchVO); +// if (resultCount == 0) { +// json.put("result", "1"); +// json.put("message", "사용 가능한 닉네임 입니다."); +// } +// else { +// json.put("result", "2"); +// json.put("message", "중복된 닉네임 입니다."); +// } +// +// return json; +// } +// +// @Override +// public HashMap updateMemberLogin(MemberVO memberVO, String root, SystemconfigVO sysConf) { +// HashMap json = new HashMap<>(); +// json.put("result", "0"); +// json.put("message", "알수없는 오류가 발생했습니다. 다시 시도해 주세요."); +// memberVO.setRegSiteCode(root); +// +// boolean memIndependent = sysConf.isMemIndependent(); +// +// //아이디 비번 널체크 +// if ("".equals(CommUtil.isNull(memberVO.getId(), "")) || "".equals(CommUtil.isNull(memberVO.getPass(), ""))) { +// return json; +// } +// +// //로그인 여부 확인 +// if (CommUtil.isUserLogin()) { +// json.put("message", "이미 로그인 되어있는 사용자 입니다."); +// return json; +// } +// +// //존재하는 아이디인지 +// MemberVO existMemVO = memberMapper.selectMemberById(memberVO); +// //정보 없음 +// if (existMemVO == null) { +// json.put("message", "아이디나 비밀번호가 일치 하지 않습니다."); +// return json; +// } +// +// //정상 사용자 +// if ("mem_normal".equals(existMemVO.getStatus())) { +// try { +// +// if (memIndependent) { +// if (!root.equals(existMemVO.getRegSiteCode())) { +// json.put("message", "해당 사이트는 회원을 독립 운영하고 있어, 다른 사이트에서 가입한 아이디로는 로그인이 불가능합니다."); +// return json; +// } +// } +// +// if (!existMemVO.isUnionMem()) { +// if (!root.equals(existMemVO.getRegSiteCode())) { +// json.put("message", "해당사이트에 접근 권한이 없는 계정입니다. \n가입한 사이트에서 회원 구분을 통합회원으로 수정하시거나, 해당사이트에 가입해주세요."); +// return json; +// } +// } +// +// //비번 불일치 +// //if (!CommUtil.matchesPass(memberVO.getPass(), existMemVO.getPass())) { +// if( !CommUtil.hexSha256(memberVO.getPass()).equals(existMemVO.getPass())) { +// //비번 오류 확인 +// if (Integer.parseInt(existMemVO.getPassTryCnt()) < 5) { +// json.put("message", existMemVO.getPassTryCnt() + "회 비밀번호가 일치 하지 않았습니다.\n\n5번 이상 비밀번호 불일치시 접속이 차단됩니다."); +// //비번 오류 횟수 증가 +// memberMapper.updatePassTryCnt(memberVO.getId()); +// return json; +// } +// //차단 +// else { +// json.put("message", "비밀번호 5회 이상 불일치로 차단 되었습니다.\n\n관리자에게 문의하세요."); +// //차단처리 +// memberVO.setStatus("1"); +// memberVO.setCutoffReason("비밀번호 5회 이상 불일치로 차단"); +// memberMapper.updateMemberCufoff(memberVO); +// return json; +// } +// } +// } catch (NoSuchAlgorithmException e1) { +// logger.error("예외 상황 발생"); +// } catch (IOException e2) { +// logger.error("예외 상황 발생"); +// } +// } +// +// //차단된 사용자 정보 +// else if ("mem_cutoff".equals(existMemVO.getStatus())) { +// json.put("result", "1"); +// json.put("message", "차단된 사용자 정보입니다."); +// return json; +// } +// //삭제된 사용자 정보 +// else if ("mem_del".equals(existMemVO.getStatus())) { +// json.put("message", "아이디나 비밀번호가 일치 하지 않습니다."); +// return json; +// } else if ("mem_wait".equals(existMemVO.getStatus())) { +// json.put("message", "아직 가입승인 처리 되지 않은 사용자입니다."); +// return json; +// } else if ("mem_unreceived".equals(existMemVO.getStatus())) { +// json.put("message", "가입이 미승인 처리된 사용자입니다."); +// return json; +// } else { +// json.put("message", "아이디나 비밀번호가 일치 하지 않습니다."); +// return json; +// } +// +// //정상 로그인 사용자 +// String ip = request.getRemoteAddr(); +// IpCountryVO ipCountryVO = ipCountryService.getCountryNameAndCode(ip); +// memberVO.setLoginIp(ip); +// memberVO.setLoginCountryCd(ipCountryVO.getCountryCode()); +// memberVO.setLoginCountryName(ipCountryVO.getCountryName()); +// +// UserAgentStringParser parser = UADetectorServiceFactory.getResourceModuleParser(); +// ReadableUserAgent uai = parser.parse(request.getHeader("User-Agent")); +// memberVO.setLoginBrowser(uai.getName()); +// memberVO.setLoginBrowserIcon(uai.getIcon()); +// memberVO.setLoginOs(uai.getOperatingSystem().getName()); +// memberVO.setLoginOsIcon(uai.getOperatingSystem().getIcon()); +// +// //로그인 정보 업데이트 +// memberMapper.updateMemberLogin(memberVO); +// +// //로그인 로그 저장 +// java.util.HashMap hmAgent = CommUtil.getUserAgentParse(request.getHeader("User-Agent")); +// MngrManagerLoginLogVO mngrManagerLoginLogVO = new MngrManagerLoginLogVO(); +// mngrManagerLoginLogVO.setLogIp(CommUtil.getClientIP(request)); +// mngrManagerLoginLogVO.setLogId(existMemVO.getId()); +// mngrManagerLoginLogVO.setLogAgent(request.getHeader("User-Agent")); +// mngrManagerLoginLogVO.setLogType("2");//1:관리자, 2:사용자 +// mngrManagerLoginLogVO.setLogDevice((String)hmAgent.get("device")); +// mngrManagerLoginLogVO.setLogOs((String)hmAgent.get("os")); +// mngrManagerLoginLogVO.setLogBrowser((String)hmAgent.get("browser")); +// mngrManagerLoginLogVO.setLogSite(root); +// try { +// mngrManagerService.mngrManagerLoginLogInsert(mngrManagerLoginLogVO); +// } catch (SQLException e1) { +// logger.error("예외 상황 발생"); +// } catch (IOException e2) { +// logger.error("예외 상황 발생"); +// } +// +// //로그인 정보 세션 저장 +// UserSessionVO userSessionVO = new UserSessionVO(); +// userSessionVO.setId(existMemVO.getId()); +// userSessionVO.setName(existMemVO.getName()); +// userSessionVO.setEmail(existMemVO.getEmail()); +// userSessionVO.setPhone(existMemVO.getPhone()); +// //사용자 VO 세션 저장 +// session.setAttribute("userSessionVO", userSessionVO); +// session.setAttribute("sessionTime", sysConf.getMemSessionTime()); +// session.setAttribute("logoutURL", "/"+root+"/login/logout.do"); +// +// //로그인 완료 +// json.put("result", "2"); +// json.put("message", ""); +// +// json.put("returnType", sysConf.getLoginRtType()); +// if (sysConf.getLoginRtType()==1){ +// json.put("url", "/"+root+"/main/index.do"); +// }else if (sysConf.getLoginRtType()==2) { +// json.put("url", "/"+root+"/contents/"+sysConf.getLoginRtMeunCode()+".do"); +// } +// +// return json; +// } +// +// @Override +// public int getMemberRegistCount() { +// return memberMapper.getMemberRegistCount(); +// } +// +// @Override +// public Map memberRegistFormCheck(MemberVO memberVO, MngrJoinFormConfigSearchVO joinForm) { +// +// Map resultMap = new HashMap<>(); +// resultMap.put("title", "성공"); +// +// if (joinForm.getName()==1) { +// if ("".equals(CommUtil.isNull(memberVO.getName(), ""))){ +// resultMap.put("title", "오류"); +// resultMap.put("msg", "이름을 입력 해 주세요."); +// resultMap.put("script", "history.back();"); +// return resultMap; +// } +// +// } +// +// if (joinForm.getNickName()==1) { +// if ("".equals(CommUtil.isNull(memberVO.getNickName(), ""))){ +// resultMap.put("title", "오류"); +// resultMap.put("msg", "별명을 입력 해 주세요."); +// resultMap.put("script", "history.back();"); +// return resultMap; +// } +// +// } +// +// if (joinForm.getPhone()==1) { +// if ("".equals(CommUtil.isNull(memberVO.getPhone(), ""))){ +// resultMap.put("title", "오류"); +// resultMap.put("msg", "전화번호를 입력 해 주세요."); +// resultMap.put("script", "history.back();"); +// return resultMap; +// } +// } +// +// if (joinForm.getMobile()==1) { +// if ("".equals(CommUtil.isNull(memberVO.getMobile(), ""))){ +// resultMap.put("title", "오류"); +// resultMap.put("msg", "핸드폰번호를 입력 해 주세요."); +// resultMap.put("script", "history.back();"); +// return resultMap; +// } +// } +// +// if (joinForm.getEmail()==1) { +// if ("".equals(CommUtil.isNull(memberVO.getEmail(), ""))){ +// resultMap.put("title", "오류"); +// resultMap.put("msg", "이메일을 입력 해 주세요."); +// resultMap.put("script", "history.back();"); +// return resultMap; +// } +// if (!CommUtil.isEmail(memberVO.getEmail())){ +// resultMap.put("title", "오류"); +// resultMap.put("msg", "올바른 이메일 형식이 아닙니다. 확인 후 다시 시도해주세요."); +// resultMap.put("script", "history.back();"); +// return resultMap; +// } +// } else { +// if (!CommUtil.isEmail(memberVO.getEmail())) memberVO.setEmail(""); +// } +// +// +// if (joinForm.getFax()==1) { +// if ("".equals(CommUtil.isNull(memberVO.getFax(), ""))){ +// resultMap.put("title", "오류"); +// resultMap.put("msg", "팩스를 입력 해 주세요."); +// resultMap.put("script", "history.back();"); +// return resultMap; +// } +// } +// +// if (joinForm.getAddress()==1) { +// if ("".equals(CommUtil.isNull(memberVO.getNewAddr2(), ""))) { +// resultMap.put("title", "오류"); +// resultMap.put("msg", "주소를 입력 해 주세요."); +// resultMap.put("script", "history.back();"); +// return resultMap; +// } +// } +// +// if (joinForm.getBirth()==1) { +// if ("".equals(CommUtil.isNull(memberVO.getBirth(), ""))){ +// resultMap.put("title", "오류"); +// resultMap.put("msg", "생일을 입력 해 주세요."); +// resultMap.put("script", "history.back();"); +// return resultMap; +// } +// } +// +// if (joinForm.getSex()==1) { +// if ("".equals(CommUtil.isNull(memberVO.getSex(), ""))){ +// resultMap.put("title", "오류"); +// resultMap.put("msg", "성별을 입력 해 주세요."); +// resultMap.put("script", "history.back();"); +// return resultMap; +// } +// } +// +// if (joinForm.getGrp()==1) { +// if ("".equals(CommUtil.isNull(memberVO.getPhone(), ""))){ +// resultMap.put("title", "오류"); +// resultMap.put("msg", "그룹을 입력해 주세요."); +// resultMap.put("script", "history.back();"); +// return resultMap; +// } +// } +// +// +// return resultMap; +// } +// +// @Override +// public int updateMemberPassword(MemberVO memberVO) { +// return memberMapper.updateMemberPassword(memberVO); +// } +// +// @Override +// public void updateMemberTemporaryPass(MemberVO member) { +// memberMapper.updateMemberPassword(member); +// } + + +} diff --git a/src/main/java/egovframework/itgcms/core/menu/service/MngrMemIPManageService.java b/src/main/java/egovframework/itgcms/core/menu/service/MngrMemIPManageService.java new file mode 100644 index 0000000..429ab27 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/menu/service/MngrMemIPManageService.java @@ -0,0 +1,12 @@ +package egovframework.itgcms.core.menu.service; + +import java.util.List; + +public interface MngrMemIPManageService { + + List mngrSiteListForIPManage(String siteCode); + + int mngrInsertIPManage(MngrMemIpManageVO ipVo); + + int mngrUpdateIPManage(MngrMemIpManageVO ipVo); +} diff --git a/src/main/java/egovframework/itgcms/core/menu/service/MngrMemIpManageVO.java b/src/main/java/egovframework/itgcms/core/menu/service/MngrMemIpManageVO.java new file mode 100644 index 0000000..b6ef371 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/menu/service/MngrMemIpManageVO.java @@ -0,0 +1,209 @@ +package egovframework.itgcms.core.menu.service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import egovframework.itgcms.common.DefaultVO; +import egovframework.itgcms.util.CommUtil; + +public class MngrMemIpManageVO extends DefaultVO{ + + private int no; + // siteCode + private String siteCode = ""; + private String siteName = ""; + /** + * ip Descripter 타입 + * 0 : 사용 안함 + * 1 : desc 차단 + * 2 : desc 허용 + **/ + private int ipDescType = 0; + // ip 목록 + private String ipDesc = ""; + // 등록자 ID + private String regMemId = ""; + // 등록일 + private Date regDt = null; + + private String updMemId = ""; + + private Date updDt = null; + + + static final String IP_REGULAR_EXPRESSION = "((0|1[0-9]{0,2}|2[0-9]?|2[0-4][0-9]|25[0-5]|[3-9][0-9]?)\\.){3}(0|1[0-9]{0,2}|2[0-9]?|2[0-4][0-9]|25[0-5]|[3-9][0-9]?)"; + + private List ipSingleList = null; // 192.168.12.1 단일 IP 값 리스트 + private List ipArangeList = null; // 192.148.12.1-192.171.24.1 명시된 IP 범위 리스트 + private List ipBandwidthList = null; // 192.162.12 IP 대역 리스트 + + + + + public List getIpSingleList() { + List ipSiList = new ArrayList(); + ipSiList.addAll(ipSingleList); + return ipSiList; + } + public List getIpArangeList() { + List ipArList = new ArrayList(); + ipArList.addAll(ipArangeList); + return ipArList; + } + public List getIpBandwidthList() { + List ipBaList = new ArrayList(); + ipBaList.addAll(ipBandwidthList); + return ipBaList; + } + + + + + public int getNo() { + return no; + } + public void setNo(int no) { + this.no = no; + } + public String getSiteCode() { + return siteCode; + } + public void setSiteCode(String siteCode) { + this.siteCode = siteCode; + } + public void setSiteName(String siteName) { + this.siteName = siteName; + } + public String getSiteName() { + return siteName; + } + public int getIpDescType() { + return ipDescType; + } + public void setIpDescType(int ipDescType) { + this.ipDescType = ipDescType; + } + public String getIpDesc() { + return ipDesc; + } + public void setIpDesc(String ipDesc) { + this.ipDesc = ipDesc; + } + public String getRegMemId() { + return regMemId; + } + public void setRegMemId(String regMemId) { + this.regMemId = regMemId; + } + public Date getRegDt() { + return regDt; + } + public void setRegDt(Date regDt) { + this.regDt = regDt; + } + public void setUpdDt(Date updDt) { + this.updDt = updDt; + } + public Date getUpdDt() { + return updDt; + } + public void setUpdMemId(String updMemId) { + this.updMemId = updMemId; + } + public String getUpdMemId() { + return updMemId; + } + + public boolean checkContainIP(String searchIp){ + + parseIpDesc(); + + for (String ip : ipBandwidthList) { + if (searchIp.startsWith(ip.trim())){ + return true; + } + } + for (String ip : ipSingleList) { + if (ip.trim().equals(searchIp)) { + return true; + } + } + + for (String[] ipArr : ipArangeList) { + if (ipArr.length==2 && checkIPArange(ipArr[0].trim(), ipArr[1].trim(), searchIp)) { + return true; + } + } + + return false; + } + + public boolean checkVaildIP(String ip){ + if (this.ipDescType == 0) { + return true; + } + boolean isContain = checkContainIP(ip); + + return this.ipDescType==1 ? !isContain : isContain; + } + + public void parseIpDesc(){ + + this.ipSingleList = null; + this.ipArangeList = null; + this.ipBandwidthList = null; + + if (this.ipDesc != null && ipDesc.length()>0) { + + this.ipSingleList = new ArrayList<>(); + this.ipArangeList = new ArrayList<>(); + this.ipBandwidthList = new ArrayList<>(); + + String[] descArr = this.ipDesc.split(","); + + for (String ip : descArr) { + + if (ip.indexOf("-")>-1) { + ipArangeList.add(ip.split("-")); + continue; + } + if (CommUtil.regEx(IP_REGULAR_EXPRESSION, ip)) { + ipSingleList.add(ip.trim()); + continue; + } + ipBandwidthList.add(ip.trim()); + } + + } + } + + public static boolean checkIPArange(String crtIp1, String crtIp2, String targetIp){ + + boolean ipCheck = CommUtil.regEx(IP_REGULAR_EXPRESSION, crtIp1) + && CommUtil.regEx(IP_REGULAR_EXPRESSION, crtIp2) + && CommUtil.regEx(IP_REGULAR_EXPRESSION, targetIp); + + if (ipCheck) { + String[] crtIp1Arr = crtIp1.split("\\."); + String[] crtIp2Arr = crtIp2.split("\\."); + String[] targetIpArr = targetIp.split("\\."); + + for (int i = 0; i < 4; i++) { + try { + if (Integer.parseInt(crtIp1Arr[i]) <= Integer.parseInt(targetIpArr[i]) && Integer.parseInt(crtIp2Arr[i]) >= Integer.parseInt(targetIpArr[i])) { + continue; + } else { + ipCheck = false; + break; + } + } catch(IndexOutOfBoundsException | NumberFormatException e){ + return false; + } + } + } + + return ipCheck; + } + +} diff --git a/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuSatisfactionSearchVO.java b/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuSatisfactionSearchVO.java new file mode 100644 index 0000000..dc43e08 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuSatisfactionSearchVO.java @@ -0,0 +1,88 @@ +package egovframework.itgcms.core.menu.service; + +import java.io.IOException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO;; + +public class MngrMenuSatisfactionSearchVO extends DefaultVO { + + /** + * + */ + private static final Logger logger = LogManager.getLogger(MngrMenuSatisfactionSearchVO.class); + private static final long serialVersionUID = -2567044152952522063L; + /** 인덱스 */ + String id = ""; //검색조건 유지 + + String query = ""; + String schMenuCode = ""; + String schMenuName = ""; + + String schSitecode = ""; + String schSdt = ""; + String schEdt = ""; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + + public String getSchMenuCode() { + return schMenuCode; + } + + public void setSchMenuCode(String schMenuCode) { + this.schMenuCode = schMenuCode; + } + + public String getSchMenuName() { + return schMenuName; + } + + public void setSchMenuName(String schMenuName) { + this.schMenuName = schMenuName; + } + + public String getSchSitecode() { + return schSitecode; + } + + public void setSchSitecode(String schSitecode) { + this.schSitecode = schSitecode; + } + + public String getSchSdt() { + return schSdt; + } + + public void setSchSdt(String schSdt) { + this.schSdt = schSdt; + } + + public String getSchEdt() { + return schEdt; + } + + public void setSchEdt(String schEdt) { + this.schEdt = schEdt; + } + + + + public String getQuery() { + String query = super.queryString(); + try{ + query += "&id=" + java.net.URLEncoder.encode(this.id, "UTF-8"); + } catch(IOException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuSatisfactionVO.java b/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuSatisfactionVO.java new file mode 100644 index 0000000..5a0469b --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuSatisfactionVO.java @@ -0,0 +1,304 @@ +package egovframework.itgcms.core.menu.service; + +import java.util.List; + +import egovframework.itgcms.core.manager.service.MngrManagerVO; + +public class MngrMenuSatisfactionVO extends MngrMenuSatisfactionSearchVO{ + + /** + * + */ + private static final long serialVersionUID = -1564814227218025153L; + + String menuCode = ""; + String id = ""; + String type = ""; + String answer1 = ""; + String answer2 = ""; + String answer3 = ""; + String answer4 = ""; + String answer5 = ""; + String answer6 = ""; + String regdt = ""; + String ip = ""; + + + String satis15 = ""; + String satis14 = ""; + String satis13 = ""; + String satis12 = ""; + String satis11 = ""; + String satis25 = ""; + String satis24 = ""; + String satis23 = ""; + String satis22 = ""; + String satis21 = ""; + + String satis35 = ""; + String satis34 = ""; + String satis33 = ""; + String satis32 = ""; + String satis31 = ""; + + String satis45 = ""; + String satis44 = ""; + String satis43 = ""; + String satis42 = ""; + String satis41 = ""; + + String satis55 = ""; + String satis54 = ""; + String satis53 = ""; + String satis52 = ""; + String satis51 = ""; + + String menuName = ""; + String menuDepth = ""; + String menuPfullname = ""; + String menuPfullcode = ""; + + public String getMenuCode() { + return menuCode; + } + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public String getAnswer1() { + return answer1; + } + public void setAnswer1(String answer1) { + this.answer1 = answer1; + } + public String getAnswer2() { + return answer2; + } + public void setAnswer2(String answer2) { + this.answer2 = answer2; + } + public String getAnswer3() { + return answer3; + } + public void setAnswer3(String answer3) { + this.answer3 = answer3; + } + public String getAnswer4() { + return answer4; + } + public void setAnswer4(String answer4) { + this.answer4 = answer4; + } + public String getAnswer5() { + return answer5; + } + public void setAnswer5(String answer5) { + this.answer5 = answer5; + } + public String getAnswer6() { + return answer6; + } + public void setAnswer6(String answer6) { + this.answer6 = answer6; + } + public String getRegdt() { + return regdt; + } + public void setRegdt(String regdt) { + this.regdt = regdt; + } + public String getIp() { + return ip; + } + public void setIp(String ip) { + this.ip = ip; + } + public String getMenuName() { + return menuName; + } + public void setMenuName(String menuName) { + this.menuName = menuName; + } + public String getMenuDepth() { + return menuDepth; + } + public void setMenuDepth(String menuDepth) { + this.menuDepth = menuDepth; + } + public String getMenuPfullname() { + return menuPfullname; + } + public void setMenuPfullname(String menuPfullname) { + this.menuPfullname = menuPfullname; + } + public String getMenuPfullcode() { + return menuPfullcode; + } + public void setMenuPfullcode(String menuPfullcode) { + this.menuPfullcode = menuPfullcode; + } + public String getSatis15() { + return satis15; + } + public void setSatis15(String satis15) { + this.satis15 = satis15; + } + public String getSatis14() { + return satis14; + } + public void setSatis14(String satis14) { + this.satis14 = satis14; + } + public String getSatis13() { + return satis13; + } + public void setSatis13(String satis13) { + this.satis13 = satis13; + } + public String getSatis12() { + return satis12; + } + public void setSatis12(String satis12) { + this.satis12 = satis12; + } + public String getSatis11() { + return satis11; + } + public void setSatis11(String satis11) { + this.satis11 = satis11; + } + public String getSatis25() { + return satis25; + } + public void setSatis25(String satis25) { + this.satis25 = satis25; + } + public String getSatis24() { + return satis24; + } + public void setSatis24(String satis24) { + this.satis24 = satis24; + } + public String getSatis23() { + return satis23; + } + public void setSatis23(String satis23) { + this.satis23 = satis23; + } + public String getSatis22() { + return satis22; + } + public void setSatis22(String satis22) { + this.satis22 = satis22; + } + public String getSatis21() { + return satis21; + } + public void setSatis21(String satis21) { + this.satis21 = satis21; + } + public String getSatis35() { + return satis35; + } + public void setSatis35(String satis35) { + this.satis35 = satis35; + } + public String getSatis34() { + return satis34; + } + public void setSatis34(String satis34) { + this.satis34 = satis34; + } + public String getSatis33() { + return satis33; + } + public void setSatis33(String satis33) { + this.satis33 = satis33; + } + public String getSatis32() { + return satis32; + } + public void setSatis32(String satis32) { + this.satis32 = satis32; + } + public String getSatis31() { + return satis31; + } + public void setSatis31(String satis31) { + this.satis31 = satis31; + } + public String getSatis45() { + return satis45; + } + public void setSatis45(String satis45) { + this.satis45 = satis45; + } + public String getSatis44() { + return satis44; + } + public void setSatis44(String satis44) { + this.satis44 = satis44; + } + public String getSatis43() { + return satis43; + } + public void setSatis43(String satis43) { + this.satis43 = satis43; + } + public String getSatis42() { + return satis42; + } + public void setSatis42(String satis42) { + this.satis42 = satis42; + } + public String getSatis41() { + return satis41; + } + public void setSatis41(String satis41) { + this.satis41 = satis41; + } + public String getSatis55() { + return satis55; + } + public void setSatis55(String satis55) { + this.satis55 = satis55; + } + public String getSatis54() { + return satis54; + } + public void setSatis54(String satis54) { + this.satis54 = satis54; + } + public String getSatis53() { + return satis53; + } + public void setSatis53(String satis53) { + this.satis53 = satis53; + } + public String getSatis52() { + return satis52; + } + public void setSatis52(String satis52) { + this.satis52 = satis52; + } + public String getSatis51() { + return satis51; + } + public void setSatis51(String satis51) { + this.satis51 = satis51; + } + + + +} diff --git a/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuSearchVO.java b/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuSearchVO.java new file mode 100644 index 0000000..34c7aab --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuSearchVO.java @@ -0,0 +1,76 @@ +package egovframework.itgcms.core.menu.service; + +import java.io.IOException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO;; + +public class MngrMenuSearchVO extends DefaultVO { + /** + * + */ + private static final Logger logger = LogManager.getLogger(MngrMenuSearchVO.class); + private static final long serialVersionUID = -1969482851118491297L; + + /** 인덱스 */ + String id = ""; //검색조건 유지 + String originalCode = "";//이동시 원본 메뉴 + String targetCode = "";//이동시 대상 메뉴 + String query = ""; + String minDepth = "0"; + String maxDepth = "10"; + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + + public String getOriginalCode() { + return originalCode; + } + + public void setOriginalCode(String originalCode) { + this.originalCode = originalCode; + } + + public String getTargetCode() { + return targetCode; + } + + public void setTargetCode(String targetCode) { + this.targetCode = targetCode; + } + + public String getMinDepth() { + return minDepth; + } + + public void setMinDepth(String minDepth) { + this.minDepth = minDepth; + } + + public String getMaxDepth() { + return maxDepth; + } + + public void setMaxDepth(String maxDepth) { + this.maxDepth = maxDepth; + } + + public String getQuery() { + String query = super.queryString(); + try{ + query += "&id=" + java.net.URLEncoder.encode(this.id, "UTF-8"); + } catch(IOException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuService.java b/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuService.java new file mode 100644 index 0000000..2952282 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuService.java @@ -0,0 +1,108 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.menu.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import egovframework.itgcms.common.ItgMap; +import egovframework.rte.psl.dataaccess.util.EgovMap; +/** + * @파일명 : MngrMenuService.java + * @파일정보 : 팝업관리 서비스 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface MngrMenuService { + List mngrTreeSubList(String pcode)throws IOException, SQLException; + + MngrMenuVO mngrMenuRegistAjax(MngrMenuVO mngrMenuVO)throws IOException, SQLException; + + int mngrMenuDupleCheck(MngrMenuVO mngrMenuVO) throws IOException, SQLException; + + void mngrMenuRegistProc(MngrMenuVO mngrMenuVO) throws IOException, SQLException; + + String mngrMenuUpdateProc(MngrMenuVO mngrMenuVO) throws IOException, SQLException; + + int mngrMenuSubCount(MngrMenuVO mngrMenuVO)throws IOException, SQLException; + + void mngrMenuRegistDeleteAjax(MngrMenuVO mngrMenuVO)throws IOException, SQLException; + + String mngrMenuSwap(MngrMenuVO mngrMenuVO)throws IOException, SQLException; + + void mngrMenuMove(MngrMenuVO mngrMenuVO)throws IOException, SQLException; + + List mngrMenuListRecursive(MngrMenuVO mngrMenuVO)throws IOException, SQLException; + + List mngrMenuAuthTreeList(HashMap hmParam)throws IOException, SQLException; + + List mngrMenuTreeList(Map param) throws IOException, SQLException; + + MngrMenuVO mngrMenuView(MngrMenuVO mngrMenuVO)throws IOException, SQLException; + + void mngrContentsUpdateProc(MngrMenuVO mngrMenuVO)throws IOException, SQLException; + + int insertMenuContentsProc(MngrMenuVO mngrMenuVO) throws IOException, SQLException; + + MngrMenuVO mngrMenuContentsView(MngrMenuVO mngrMenuVO)throws IOException, SQLException; + + MngrMenuVO getTemporarySaved(MngrMenuVO mngrMenuVO)throws IOException, SQLException; + + int mngrUpdateMenuTempContents(MngrMenuVO mngrMenuVO) throws IOException, SQLException; + + int mngrInsertMenuTempContents(MngrMenuVO mngrMenuVO) throws IOException, SQLException; + + List mngrMenuSubList(MngrMenuVO tmpMenuVO)throws IOException, SQLException; + + List webSubMainList(MngrMenuVO tmpMenuVO)throws IOException, SQLException; + + int deleteTemporaryMenuContent(MngrMenuVO mngrMenuVO) throws IOException, SQLException; + + int mngrCountRevisionList(MngrMenuVO menuSearchVO) throws IOException, SQLException; + + List selectRevisionList(MngrMenuVO menuSearchVO) throws IOException, SQLException; + + + MngrMenuSatisfactionVO selectMngrMenuSatisfactionView( + MngrMenuSatisfactionVO mngrMenuSatisfactionVO)throws IOException, SQLException; + + void insertMngrMenuSatisfaction( + MngrMenuSatisfactionVO mngrMenuSatisfactionVO)throws IOException, SQLException; + + List mngrMenuSatisfactionList(MngrMenuSatisfactionSearchVO mngrMenuSatisfactionSearchVO)throws IOException, SQLException; + + List mngrMenuSatisfactionListByMenuCode( + MngrMenuSatisfactionSearchVO mngrMenuSatisfactionSearchVO) throws IOException, SQLException; + + List getBoardListbySitecode(EgovMap paramMap) throws IOException, SQLException; + + MngrMenuVO selectRevisionByIdx(String revision) throws IOException, SQLException; + + int deleteRevision(MngrMenuVO searchVO, String[] delIdxArr) throws IOException, SQLException; + + int setMenuProgramInfo(EgovMap egovMap) throws IOException, SQLException; + + EgovMap getMenuProgramInfo(EgovMap egovMap) throws IOException, SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuVO.java b/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuVO.java new file mode 100644 index 0000000..47a5e8a --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/menu/service/MngrMenuVO.java @@ -0,0 +1,443 @@ +package egovframework.itgcms.core.menu.service; + +import java.util.ArrayList; +import java.util.List; + +import egovframework.itgcms.core.manager.service.MngrManagerVO; + +public class MngrMenuVO extends MngrMenuSearchVO{ + /** + * + */ + private static final long serialVersionUID = -1348350626383443851L; + /** 메뉴 코드 */ + String menuCode = ""; + /** 메뉴 이름 */ + String menuName = ""; + /** 메뉴 타입 */ + String menuType = ""; + /** 메뉴 서브 타입 */ + String menuSubType = ""; + /** 프로그램 타입 */ + String programType = ""; + /** 이미지 */ + String menuImage = ""; + String menuImg = ""; + String menuImgAlt = ""; + String oldMenuImg = ""; + String menuIcon = ""; + String menuIconColor = ""; + /** 링크 주소 */ + String menuUrl = ""; + /** 메뉴 네비게이션 */ + String menuNavi = ""; + /** 뎁스 */ + String menuDepth = ""; + /** 부모코드 */ + String menuPcode = "0"; + /** 순서 */ + String menuOrder = ""; + /** 메뉴 설명*/ + String menuMemo = ""; + /** 사용여부 */ + String menuUseyn = ""; + /** 등록일 */ + String regdt = ""; + /** 수정일 */ + String upddt = ""; + /** 삭제일 */ + String deldt = ""; + /** 등록자아이디 */ + String regmemid = ""; + /** 수정자아이디 */ + String updmemid = ""; + /** 삭제자아이디 */ + String delmemid = ""; + /** 삭제여부 */ + String delyn = ""; + /** 오픈 타입 */ + String menuShowtype = ""; + /** 관리 링크주소 */ + String menuMngurl = ""; + /** 담당자정보 표시여부 */ + String menuChargeuseyn = ""; + /** 담당자정보 */ + String mngId = ""; + /** 사이드메뉴 표시여부 */ + String menuLnbuseyn = ""; + /** 고객만족도조사 표시여부 */ + String menuResearchuseyn = ""; + /** 부모 풀 네임 */ + String menuPfullname= ""; + /** 부모 풀 코드 */ + String menuPfullcode= ""; + /** 사용구분 */ + String menuUsetype= ""; + /** 컨텐츠 */ + String menuContents= ""; + /** QR 사용여부 */ + String menuQruseyn = ""; + /** SNS공유 사용여부 */ + String menuSnsShareyn = ""; + /** 페이지 형태 */ + String menuUseFixwidth = ""; + + /** 담당자 이름 */ + String mngName = ""; + + /** 변경전 메뉴 풀 네임*/ + String menuOldpfullname = ""; + /** 변경전 메뉴 풀 코드*/ + String menuOldpfullcode = ""; + /** 서브 메뉴 */ + String subtree = ""; + + String swaptype = ""; + + /** 서브타입종류 **/ + String subMenuList = ""; + String programList = ""; + String boardList = ""; + + List mngrMenuList = null; + + MngrManagerVO mngrManagerVO = null; + + String menuFullorder = ""; + + int menuMoveDepth = 0; + + /** 메뉴로그 테이블용 인덱스 */ + String menuLogIdx = ""; + + String siteCode = ""; + + String[] delIdxArr = null; + + int revisionNum = 0; + + public String getMenuCode() { + return menuCode; + } + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + public String getMenuName() { + return menuName; + } + public void setMenuName(String menuName) { + this.menuName = menuName; + } + public String getMenuType() { + return menuType; + } + public void setMenuType(String menuType) { + this.menuType = menuType; + } + public String getMenuSubType() { + return menuSubType; + } + public void setMenuSubType(String menuSubType) { + this.menuSubType = menuSubType; + } + public String getProgramType() { + return programType; + } + public void setProgramType(String programType) { + this.programType = programType; + } + public String getMenuImage() { + return menuImage; + } + public void setMenuImage(String menuImage) { + this.menuImage = menuImage; + } + public String getMenuImg() { + return menuImg; + } + public void setMenuImg(String menuImg) { + this.menuImg = menuImg; + } + public String getMenuImgAlt() { + return menuImgAlt; + } + public void setMenuImgAlt(String menuImgAlt) { + this.menuImgAlt = menuImgAlt; + } + public String getOldMenuImg() { + return oldMenuImg; + } + public void setOldMenuImg(String oldMenuImg) { + this.oldMenuImg = oldMenuImg; + } + public String getMenuIcon() { + return menuIcon; + } + public void setMenuIcon(String menuIcon) { + this.menuIcon = menuIcon; + } + public String getMenuIconColor() { + return menuIconColor; + } + public void setMenuIconColor(String menuIconColor) { + this.menuIconColor = menuIconColor; + } + public String getMenuUrl() { + return menuUrl; + } + public void setMenuUrl(String menuUrl) { + this.menuUrl = menuUrl; + } + public String getMenuNavi() { + return menuNavi; + } + public void setMenuNavi(String menuNavi) { + this.menuNavi = menuNavi; + } + public String getMenuDepth() { + return menuDepth; + } + public void setMenuDepth(String menuDepth) { + this.menuDepth = menuDepth; + } + public String getMenuPcode() { + return menuPcode; + } + public void setMenuPcode(String menuPcode) { + this.menuPcode = menuPcode; + } + public String getMenuOrder() { + return menuOrder; + } + public void setMenuOrder(String menuOrder) { + this.menuOrder = menuOrder; + } + public String getMenuOldpfullname() { + return menuOldpfullname; + } + public void setMenuOldpfullname(String menuOldpfullname) { + this.menuOldpfullname = menuOldpfullname; + } + public String getMenuUseyn() { + return menuUseyn; + } + public void setMenuUseyn(String menuUseyn) { + this.menuUseyn = menuUseyn; + } + public String getRegdt() { + return regdt; + } + public void setRegdt(String regdt) { + this.regdt = regdt; + } + public String getUpddt() { + return upddt; + } + public void setUpddt(String upddt) { + this.upddt = upddt; + } + public String getDeldt() { + return deldt; + } + public void setDeldt(String deldt) { + this.deldt = deldt; + } + public String getRegmemid() { + return regmemid; + } + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + public String getUpdmemid() { + return updmemid; + } + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + public String getDelmemid() { + return delmemid; + } + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + public String getDelyn() { + return delyn; + } + public void setDelyn(String delyn) { + this.delyn = delyn; + } + public String getSubtree() { + return subtree; + } + public void setSubtree(String subtree) { + this.subtree = subtree; + } + public String getSwaptype() { + return swaptype; + } + public void setSwaptype(String swaptype) { + this.swaptype = swaptype; + } + public String getMenuMemo() { + return menuMemo; + } + public void setMenuMemo(String menuMemo) { + this.menuMemo = menuMemo; + } + public String getMenuShowtype() { + return menuShowtype; + } + public void setMenuShowtype(String menuShowtype) { + this.menuShowtype = menuShowtype; + } + public String getMenuMngurl() { + return menuMngurl; + } + public void setMenuMngurl(String menuMngurl) { + this.menuMngurl = menuMngurl; + } + public String getMenuChargeuseyn() { + return menuChargeuseyn; + } + public void setMenuChargeuseyn(String menuChargeuseyn) { + this.menuChargeuseyn = menuChargeuseyn; + } + public String getMngId() { + return mngId; + } + public void setMngId(String mngId) { + this.mngId = mngId; + } + public String getMenuLnbuseyn() { + return menuLnbuseyn; + } + public void setMenuLnbuseyn(String menuLnbuseyn) { + this.menuLnbuseyn = menuLnbuseyn; + } + public String getMenuUseFixwidth() { + return menuUseFixwidth; + } + public void setMenuUseFixwidth(String menuUseFixwidth) { + this.menuUseFixwidth = menuUseFixwidth; + } + public String getMenuResearchuseyn() { + return menuResearchuseyn; + } + public void setMenuResearchuseyn(String menuResearchuseyn) { + this.menuResearchuseyn = menuResearchuseyn; + } + public List getMngrMenuList() { + return mngrMenuList; + } + public void setMngrMenuList(List mngrMenuList) { + this.mngrMenuList = new ArrayList(); + this.mngrMenuList.addAll(mngrMenuList); + } + public String getMngName() { + return mngName; + } + public void setMngName(String mngName) { + this.mngName = mngName; + } + public String getMenuPfullname() { + return menuPfullname; + } + public void setMenuPfullname(String menuPfullname) { + this.menuPfullname = menuPfullname; + } + public String getMenuPfullcode() { + return menuPfullcode; + } + public void setMenuPfullcode(String menuPfullcode) { + this.menuPfullcode = menuPfullcode; + } + public String getMenuUsetype() { + return menuUsetype; + } + public void setMenuUsetype(String menuUsetype) { + this.menuUsetype = menuUsetype; + } + public String getMenuOldpfullcode() { + return menuOldpfullcode; + } + public void setMenuOldpfullcode(String menuOldpfullcode) { + this.menuOldpfullcode = menuOldpfullcode; + } + public String getMenuContents() { + return menuContents; + } + public void setMenuContents(String menuContents) { + this.menuContents = menuContents; + } + public String getMenuQruseyn() { + return menuQruseyn; + } + public void setMenuQruseyn(String menuQruseyn) { + this.menuQruseyn = menuQruseyn; + } + public String getMenuSnsShareyn() { + return menuSnsShareyn; + } + public void setMenuSnsShareyn(String menuSnsShareyn) { + this.menuSnsShareyn = menuSnsShareyn; + } + public MngrManagerVO getMngrManagerVO() { + return mngrManagerVO; + } + public void setMngrManagerVO(MngrManagerVO mngrManagerVO) { + this.mngrManagerVO = mngrManagerVO; + } + public String getMenuFullorder() { + return menuFullorder; + } + public void setMenuFullorder(String menuFullorder) { + this.menuFullorder = menuFullorder; + } + public int getMenuMoveDepth() { + return menuMoveDepth; + } + public void setMenuMoveDepth(int menuMoveDepth) { + this.menuMoveDepth = menuMoveDepth; + } + + public String getSubMenuList() { + return subMenuList; + } + public void setSubMenuList(String subMenuList) { + this.subMenuList = subMenuList; + } + public String getProgramList() { + return programList; + } + public void setProgramList(String programList) { + this.programList = programList; + } + public String getBoardList() { + return boardList; + } + public void setBoardList(String boardList) { + this.boardList = boardList; + } + public String getSiteCode() { + return siteCode; + } + public void setSiteCode(String siteCode) { + this.siteCode = siteCode; + } + public void setRevisionNum(int revisionNum) { + this.revisionNum = revisionNum; + } + public int getRevisionNum() { + return revisionNum; + } + public void setDelIdxArr(String[] delIdxArr) { + List strList = new ArrayList(); + for(int i=0; i < delIdxArr.length; i++) { + strList.add(delIdxArr[i]); + } + this.delIdxArr = strList.toArray(new String[delIdxArr.length]); + } + public String[] getDelIdxArr() { + return delIdxArr; + } +} diff --git a/src/main/java/egovframework/itgcms/core/menu/service/impl/MngrMemIPManageMapper.java b/src/main/java/egovframework/itgcms/core/menu/service/impl/MngrMemIPManageMapper.java new file mode 100644 index 0000000..74b708a --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/menu/service/impl/MngrMemIPManageMapper.java @@ -0,0 +1,19 @@ +package egovframework.itgcms.core.menu.service.impl; + +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +import egovframework.itgcms.core.menu.service.MngrMemIpManageVO; + +@Mapper("mngrMemIPManageMapper") +public interface MngrMemIPManageMapper { + + List mngrSiteListForIPManage(); + + MngrMemIpManageVO mngrIPManageBySiteCode(String siteCode); + + int mngrInsertIPManage(MngrMemIpManageVO siteVo); + + int mngrUpdateIPManage(MngrMemIpManageVO siteVo); +} diff --git a/src/main/java/egovframework/itgcms/core/menu/service/impl/MngrMemIPManageServiceImpl.java b/src/main/java/egovframework/itgcms/core/menu/service/impl/MngrMemIPManageServiceImpl.java new file mode 100644 index 0000000..bed675d --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/menu/service/impl/MngrMemIPManageServiceImpl.java @@ -0,0 +1,39 @@ +package egovframework.itgcms.core.menu.service.impl; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.itgcms.core.menu.service.MngrMemIPManageService; +import egovframework.itgcms.core.menu.service.MngrMemIpManageVO; + +@Service("mngrMemIPManageService") +public class MngrMemIPManageServiceImpl implements MngrMemIPManageService { + + @Resource(name="mngrMemIPManageMapper") + private MngrMemIPManageMapper mngrMemIPManageMapper; + + @Override + public List mngrSiteListForIPManage(String siteCode) { + if (siteCode==null || "".equals(siteCode)) { + return mngrMemIPManageMapper.mngrSiteListForIPManage(); + } + List returnVal = new ArrayList<>(); + returnVal.add(mngrMemIPManageMapper.mngrIPManageBySiteCode(siteCode)); + return returnVal; + } + + @Override + public int mngrUpdateIPManage(MngrMemIpManageVO ipVo) { + return mngrMemIPManageMapper.mngrUpdateIPManage(ipVo); + } + + @Override + public int mngrInsertIPManage(MngrMemIpManageVO ipVo) { + return mngrMemIPManageMapper.mngrInsertIPManage(ipVo); + } + +} diff --git a/src/main/java/egovframework/itgcms/core/menu/service/impl/MngrMenuMapper.java b/src/main/java/egovframework/itgcms/core/menu/service/impl/MngrMenuMapper.java new file mode 100644 index 0000000..1b80644 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/menu/service/impl/MngrMenuMapper.java @@ -0,0 +1,182 @@ +/* + * Copyright 2011 MOPAS(Ministry of Public Mngristration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.menu.service.impl; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.core.menu.service.MngrMenuSatisfactionSearchVO; +import egovframework.itgcms.core.menu.service.MngrMenuSatisfactionVO; +import egovframework.itgcms.core.menu.service.MngrMenuVO; +import egovframework.itgcms.core.site.service.MngrSiteVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +/** + * menu에 관한 데이터처리 매퍼 클래스 + * + * @author 표준프레임워크센터 + * @since 2014.01.24 + * @version 1.0 + * @see
    + *  == 개정이력(Modification Information) ==
    + *
    + *          수정일          수정자           수정내용
    + *  ----------------    ------------    ---------------------------
    + *   2014.01.24        표준프레임워크센터          최초 생성
    + *
    + * 
    + */ +@Mapper("mngrMenuMapper") +public interface MngrMenuMapper { + + /* + + *//** + * 글 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + *//* + List mngrMenuList(MngrMenuSearchVO searchVO) throws SQLException; + + *//** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + *//* + int mngrMenuListTotCnt(MngrMenuSearchVO searchVO) throws SQLException; + + + + MngrMenuVO mngrMenuView(MngrMenuSearchVO searchVO) throws SQLException; + + + + + + void mngrMenuDelProc(MngrMenuVO menuVO)throws SQLException; + + void mngrMenuChkDelProc(MngrMenuVO menuVO)throws SQLException; + + List> treeMenuList()throws SQLException; + + String mngrMenuSubMaxOrder(String id)throws SQLException; + + HashMap mngrMenuChangeOrder(MngrMenuVO mngrMenuVO)throws SQLException; + + void mngrUpdateOrder(HashMap param)throws SQLException; + + void mngrMenuGroupInit()throws SQLException; + + void mngrMenuGroupUpdate(HashMap param)throws SQLException; + + int mngrMenuSubMaxDepth(HashMap hmParam)throws SQLException; + + + + + + void mngrMenuMoveUpdatePcode(HashMap hmParam) throws SQLException; + + void mngrMenuMoveUpdateOrder(HashMap hmParam) throws SQLException;*/ + + List mngrTreeSubList(String pcode)throws SQLException; + + MngrMenuVO mngrMenuRegistAjax(MngrMenuVO mngrMenuVO)throws SQLException; + + int mngrMenuDupleCheck(MngrMenuVO mngrMenuVO) throws SQLException; + + void mngrMenuRegistProc(MngrMenuVO menuVO) throws SQLException; + + void mngrMenuUpdateProc(MngrMenuVO menuVO) throws SQLException; + + int mngrMenuSubCount(MngrMenuVO mngrMenuVO)throws SQLException; + + void mngrMenuRegistDeleteAjax(MngrMenuVO mngrMenuVO) throws SQLException; + + MngrMenuVO mngrMenuSwapTarget(MngrMenuVO mngrMenuVO)throws SQLException; + + void mngrMenuSwap(HashMap hmParam)throws SQLException; + + void mngrMenuMove(MngrMenuVO mngrMenuVO)throws SQLException; + + List mngrMenuListRecursive(MngrMenuVO mngrMenuVO)throws SQLException; + + void mngrMenuUpdateProcSubmenufullname(MngrMenuVO mngrMenuVO)throws SQLException; + + void mngrMenuUpdateProcSubmenufullcode(MngrMenuVO mngrMenuVO)throws SQLException; + + List mngrMenuAuthTreeList(HashMap hmParam)throws SQLException; + + List mngrMenuTreeList(Map param) throws SQLException; + + MngrMenuVO mngrMenuView(MngrMenuVO mngrMenuVO)throws SQLException; + + void mngrContentsUpdateProc(MngrMenuVO mngrMenuVO)throws SQLException; + + List mngrMenuSubList(MngrMenuVO tmpMenuVO)throws SQLException; + + List webSubMainList(MngrMenuVO tmpMenuVO)throws SQLException; + + void mngrMenuDelAllSiteMenu(MngrSiteVO mngrSiteVO); + + MngrMenuSatisfactionVO selectMngrMenuSatisfactionView( + MngrMenuSatisfactionVO mngrMenuSatisfactionVO)throws SQLException; + + void insertMngrMenuSatisfaction( + MngrMenuSatisfactionVO mngrMenuSatisfactionVO)throws SQLException; + + List mngrMenuSatisfactionList(MngrMenuSatisfactionSearchVO mngrMenuSatisfactionSearchVO) throws SQLException; + + List mngrMenuSatisfactionListByMenuCode(MngrMenuSatisfactionSearchVO mngrMenuSatisfactionSearchVO) throws SQLException; + + void mngrMenuMoveUpdateDepth(MngrMenuVO mngrMenuVO) throws SQLException; + + int countMainPageContentsByMenuCode(Map queryData); + + List getBoardListbySitecode(EgovMap paramMap); + + ItgMap getMenuInfoByBoardCode(Map paramMap) throws SQLException; + + int insertMenuContents(MngrMenuVO mngrMenuVO) throws SQLException; + + MngrMenuVO selectMenuContents(MngrMenuVO mngrMenuVO) throws SQLException; + + int updateTemporaryMenuContents(MngrMenuVO mngrMenuVO) throws SQLException; + + MngrMenuVO getTemporarySaved(MngrMenuVO mngrMenuVO)throws SQLException; + + int deleteTemporaryMenuContent(MngrMenuVO mngrMenuVO) throws SQLException; + + int mngrCountRevisionList(MngrMenuVO menuSearchVO) throws SQLException; + + List selectRevisionList(MngrMenuVO menuSearchVO) throws SQLException; + + MngrMenuVO selectRevisionByIdx(String revision) throws SQLException; + + int deleteContentRevision(MngrMenuVO menuSearchVO) throws SQLException; + + int setMenuProgramInfo(EgovMap egovMap) throws SQLException; + + EgovMap getMenuProgramInfo(EgovMap egovMap) throws SQLException; + + int delMenuProgramInfo(EgovMap egovMap) throws SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/menu/service/impl/MngrMenuServiceImpl.java b/src/main/java/egovframework/itgcms/core/menu/service/impl/MngrMenuServiceImpl.java new file mode 100644 index 0000000..ec94498 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/menu/service/impl/MngrMenuServiceImpl.java @@ -0,0 +1,414 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.menu.service.impl; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +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.itgcms.common.ItgMap; +import egovframework.itgcms.core.menu.service.MngrMenuSatisfactionSearchVO; +import egovframework.itgcms.core.menu.service.MngrMenuSatisfactionVO; +import egovframework.itgcms.core.menu.service.MngrMenuService; +import egovframework.itgcms.core.menu.service.MngrMenuVO; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +/** + * @파일명 : MenuServiceImpl.java + * @파일정보 : 팝업 서비스 구현 클래스 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Service("mngrMenuService") +public class MngrMenuServiceImpl extends EgovAbstractServiceImpl implements MngrMenuService { + + private static final Logger LOGGER = LoggerFactory.getLogger(MngrMenuServiceImpl.class); + + /** MenuDAO */ + // ibatis 사용 + /*@Resource(name="MenuDAO") + private MenuDAO menuDAO;*/ + // mybatis 사용 + @Resource(name="mngrMenuMapper") + private MngrMenuMapper mngrMenuMapper; + + /* + + @Override + public List> treeMenuList() throws IOException, SQLException { + return mngrMenuMapper.treeMenuList(); + } + + *//** + * 글 목록을 조회한다. + * @param mngrMenuSearchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + *//* + public List mngrMenuList(MngrMenuSearchVO mngrMenuSearchVO) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuList(mngrMenuSearchVO); + } + + *//** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + *//* + public int mngrMenuListTotCnt(MngrMenuSearchVO mngrMenuSearchVO) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuListTotCnt(mngrMenuSearchVO); + } + + + + + + *//** + * 글을 조회한다. + * @param mngrMenuSearchVO - 조회할 정보가 담긴 searchVO + * @return 조회 결과 + * @exception Exception + *//* + public MngrMenuVO mngrMenuView(MngrMenuSearchVO mngrMenuSearchVO) throws IOException, SQLException { + MngrMenuVO resultVO = mngrMenuMapper.mngrMenuView(mngrMenuSearchVO); + if (resultVO == null) + throw processException("info.nodata.msg"); + return resultVO; + } + + + + public String mngrMenuUpdateProc(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + mngrMenuMapper.mngrMenuUpdateProc(mngrMenuVO); + return ""; + } + + @Override + public String mngrMenuSubMaxOrder(String id) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuSubMaxOrder(id); + } + + + + @Override + public String mngrMenuChangeOrder(MngrMenuVO mngrMenuVO, String mode, int _MENU_MAX_LENGTH) throws IOException, SQLException { + HashMap hm = mngrMenuMapper.mngrMenuChangeOrder(mngrMenuVO); + String result = ""; + if(hm != null){ + if(!"".equals(CommUtil.isNull(hm.get(mode), ""))){ //mode 값 up, down 값이 null이 아니면.. + String[] codeOrder = String.valueOf(hm.get(mode)).split("::"); //code::order + HashMap param = new HashMap(); + // 선택한 메뉴와 대상 메뉴의 order를 변경하고, 해당 메뉴들이 서브메뉴를 가지고 있으면 서브 메뉴의 상위뎁스 order를 부모 order 로 수정한다 + // 예 부모 10100 이고 하위에 10101, 10102, 10103 등이 있다면 + // 부모 order가 101에서 102로 변경 된다. + // 부모 1뎁스의 order코드는 102이다(substring(0, (2 * depth + 1)), 하위 메뉴들의 101 부분을 102로 변경해야 부모에 따라 자식 메뉴들도 따라서 이동하게 된다. + mngrMenuMapper.mngrMenuGroupInit(); + + String depth = String.valueOf(hm.get("menu_depth")); + int pos = (_MENU_MAX_LENGTH * Integer.parseInt(depth)) + 1;//substring 할 두번째 인수. + + // 대상 메뉴 order를 변경하기 위해 menu_group에 값을 미리 저장함.(두개의 오더를 서로 바꿀려면 임시 저정이 필요해서 이방법으로 대체함) + // 1010400, 1010500 + String order1 = codeOrder[1].substring(0, pos); + String order2 = String.valueOf(hm.get("menu_order")).substring(0, pos); + + + param.put("menu_group", order1); //모드에 해당하는 메뉴 코드 10104 + mngrMenuMapper.mngrMenuGroupUpdate(param); + + param.put("menu_group", order2); //모드에 해당하는 메뉴 코드 10105 + mngrMenuMapper.mngrMenuGroupUpdate(param); + + param.put("menu_group", order1); + param.put("menu_order", order2); //모드에 해당하는 메뉴 코드 10105 + param.put("menu_depth", depth); + param.put("_MENU_MAX_LENGTH", _MENU_MAX_LENGTH); + mngrMenuMapper.mngrUpdateOrder(param); + + param.put("menu_group", order2); + param.put("menu_order", order1); //모드에 해당하는 메뉴 코드 10105 + param.put("menu_depth", depth); + param.put("_MENU_MAX_LENGTH", _MENU_MAX_LENGTH); + mngrMenuMapper.mngrUpdateOrder(param); + + + + + + result = "1"; + }else{ + result = "0"; + } + } + + return result; + } + + public void mngrMenuDelProc(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + mngrMenuMapper.mngrMenuDelProc(mngrMenuVO); + } + + @Override + public void mngrMenuChkDelProc(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + mngrMenuMapper.mngrMenuChkDelProc(mngrMenuVO); + } + + @Override + public int mngrMenuSubMaxDepth(HashMap hmParam) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuSubMaxDepth(hmParam); + } + + + + @Override + public void mngrMenuMove(HashMap hmParam) throws IOException, SQLException { + mngrMenuMapper.mngrMenuMoveUpdatePcode(hmParam); + mngrMenuMapper.mngrMenuMoveUpdateOrder(hmParam); + } +*/ + @Override + public List mngrTreeSubList(String pcode) + throws IOException, SQLException { + return mngrMenuMapper.mngrTreeSubList(pcode); + } + + + @Override + public MngrMenuVO mngrMenuRegistAjax(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuRegistAjax(mngrMenuVO); + } + + @Override + public int mngrMenuDupleCheck(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuDupleCheck(mngrMenuVO); + } + + public void mngrMenuRegistProc(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + mngrMenuMapper.mngrMenuRegistProc(mngrMenuVO); + } + + public String mngrMenuUpdateProc(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + mngrMenuMapper.mngrMenuUpdateProc(mngrMenuVO); // 메뉴 내용 수정 + // 메뉴명이 바꼈으면 서브 메뉴의 fullname도 바뀐이름 적용. + mngrMenuMapper.mngrMenuUpdateProcSubmenufullname(mngrMenuVO); + return "1"; + } + + @Override + public int mngrMenuSubCount(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuSubCount(mngrMenuVO); + } + @Override + public void mngrMenuRegistDeleteAjax(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + mngrMenuMapper.mngrMenuRegistDeleteAjax(mngrMenuVO); + } + + + @Override + public String mngrMenuSwap(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + //두개의 정보를 동시에 변경해야 하기때문에 트랜젝션이 필요해서 service에서 처리함. + MngrMenuVO target = mngrMenuMapper.mngrMenuSwapTarget(mngrMenuVO); + if(target == null){ + return "2"; // 첫번째, 마지막 위치 + } + MngrMenuVO source = mngrMenuMapper.mngrMenuRegistAjax(mngrMenuVO); + if("1".equals(source.getMenuDepth())){ + return "3"; + } + HashMap hmParam = new HashMap(); + /* 타겟의 오더순서를 소스의 오더순서로 설정*/ + hmParam.put("menuCode", target.getMenuCode()); + hmParam.put("menuOrder", source.getMenuOrder()); + mngrMenuMapper.mngrMenuSwap(hmParam); + + /* 소스의 오더순서를 타겟의 오더순서로 설정*/ + hmParam.put("menuCode", source.getMenuCode()); + hmParam.put("menuOrder", target.getMenuOrder()); + mngrMenuMapper.mngrMenuSwap(hmParam); + return "1"; + } + + + @Override + public void mngrMenuMove(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + mngrMenuMapper.mngrMenuMove(mngrMenuVO); // 부모코드 update로 메뉴가 이동되게함. order는 같은 레벨의 메뉴중 최대값 + 1설정 + mngrMenuMapper.mngrMenuMoveUpdateDepth(mngrMenuVO); // 이동하는 코드의 하위코드들의 depth 를 증가시킴 + mngrMenuMapper.mngrMenuUpdateProcSubmenufullcode(mngrMenuVO); + + } + + + @Override + public List mngrMenuListRecursive(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuListRecursive(mngrMenuVO); + } + + + @Override + public List mngrMenuAuthTreeList(HashMap hmParam) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuAuthTreeList(hmParam); + } + + + @Override + public List mngrMenuTreeList(Map param) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuTreeList(param); + } + + + @Override + public MngrMenuVO mngrMenuView(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuView(mngrMenuVO); + } + + @Override + public MngrMenuVO mngrMenuContentsView(MngrMenuVO mngrMenuVO)throws IOException, SQLException { + return mngrMenuMapper.selectMenuContents(mngrMenuVO); + } + + @Override + public void mngrContentsUpdateProc(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + mngrMenuMapper.insertMenuContents(mngrMenuVO); + } + + @Override + public int insertMenuContentsProc(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + deleteTemporaryMenuContent(mngrMenuVO); + return mngrMenuMapper.insertMenuContents(mngrMenuVO); + } + + @Override + public List mngrMenuSubList(MngrMenuVO tmpMenuVO) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuSubList(tmpMenuVO); + } + + @Override + public List webSubMainList(MngrMenuVO tmpMenuVO) throws IOException, SQLException { + return mngrMenuMapper.webSubMainList(tmpMenuVO); + } + + + @Override + public MngrMenuSatisfactionVO selectMngrMenuSatisfactionView( + MngrMenuSatisfactionVO mngrMenuSatisfactionVO) throws IOException, SQLException { + return mngrMenuMapper.selectMngrMenuSatisfactionView(mngrMenuSatisfactionVO); + } + + + @Override + public void insertMngrMenuSatisfaction( + MngrMenuSatisfactionVO mngrMenuSatisfactionVO) throws IOException, SQLException { + mngrMenuMapper.insertMngrMenuSatisfaction(mngrMenuSatisfactionVO); + } + + + @Override + public List mngrMenuSatisfactionList(MngrMenuSatisfactionSearchVO mngrMenuSatisfactionSearchVO) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuSatisfactionList(mngrMenuSatisfactionSearchVO); + } + + + @Override + public List mngrMenuSatisfactionListByMenuCode( MngrMenuSatisfactionSearchVO mngrMenuSatisfactionSearchVO) throws IOException, SQLException { + return mngrMenuMapper.mngrMenuSatisfactionListByMenuCode(mngrMenuSatisfactionSearchVO); + } + + + @Override + public List getBoardListbySitecode(EgovMap paramMap) throws IOException, SQLException { + return mngrMenuMapper.getBoardListbySitecode(paramMap); + } + + + @Override + public int mngrUpdateMenuTempContents(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + return mngrMenuMapper.updateTemporaryMenuContents(mngrMenuVO); + } + + + @Override + public int mngrInsertMenuTempContents(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + return mngrMenuMapper.insertMenuContents(mngrMenuVO); + } + + @Override + public MngrMenuVO getTemporarySaved(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + return mngrMenuMapper.getTemporarySaved(mngrMenuVO); + } + + + @Override + public int deleteTemporaryMenuContent(MngrMenuVO mngrMenuVO) throws IOException, SQLException { + return mngrMenuMapper.deleteTemporaryMenuContent(mngrMenuVO); + } + + @Override + public int mngrCountRevisionList(MngrMenuVO menuSearchVO) throws IOException, SQLException { + return mngrMenuMapper.mngrCountRevisionList(menuSearchVO); + } + + @Override + public List selectRevisionList(MngrMenuVO menuSearchVO) throws IOException, SQLException { + return mngrMenuMapper.selectRevisionList(menuSearchVO); + } + + + @Override + public MngrMenuVO selectRevisionByIdx(String revision) throws IOException, SQLException { + return mngrMenuMapper.selectRevisionByIdx(revision); + } + + @Override + public int deleteRevision(MngrMenuVO searchVO, String[] delIdxArr) throws IOException, SQLException { + mngrMenuMapper.deleteTemporaryMenuContent(searchVO); + return mngrMenuMapper.deleteContentRevision(searchVO); + } + + @Override + public int setMenuProgramInfo(EgovMap egovMap) throws IOException, SQLException { + // TODO Auto-generated method stub + + // 1. 관련 매핑 정보를 삭제 + mngrMenuMapper.delMenuProgramInfo(egovMap); + + // 2. 새롭게 기록 + int result = mngrMenuMapper.setMenuProgramInfo(egovMap); + + return result; + } + + @Override + public EgovMap getMenuProgramInfo(EgovMap egovMap) throws IOException, SQLException { + // TODO Auto-generated method stub + return mngrMenuMapper.getMenuProgramInfo(egovMap); + } +} diff --git a/src/main/java/egovframework/itgcms/core/popup/service/MngrPopupSearchVO.java b/src/main/java/egovframework/itgcms/core/popup/service/MngrPopupSearchVO.java new file mode 100644 index 0000000..fe942dd --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/popup/service/MngrPopupSearchVO.java @@ -0,0 +1,61 @@ +package egovframework.itgcms.core.popup.service; + +import java.io.IOException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.itgcms.common.DefaultVO;; + +public class MngrPopupSearchVO extends DefaultVO { + /** + * + */ + private static final Logger logger = LogManager.getLogger(MngrPopupSearchVO.class); + private static final long serialVersionUID = 2180647972533879266L; + /** 팝업타입 /WEB-INF/config/cms/config_popup.xml 파일에 설정된 type 값 */ + String schPopupType = "1"; //검색조건 유지 + /** 팝업인덱스 */ + String id = ""; //검색조건 유지 + /** 현재 활성화 여부 */ + String schActive = ""; //검색조건 유지 + + String query = ""; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getSchPopupType() { + return schPopupType; + } + + public void setSchPopupType(String schPopupType) { + if(schPopupType == null || "".equals(schPopupType)) schPopupType = "1"; + this.schPopupType = schPopupType; + } + + public String getSchActive() { + return schActive; + } + + public void setSchActive(String schActive) { + this.schActive = schActive; + } + + public String getQuery() { + String query = super.queryString(); + try{ + query += "&schPopupType=" + java.net.URLEncoder.encode(this.schPopupType, "UTF-8"); + query += "&schActive=" + java.net.URLEncoder.encode(this.schActive, "UTF-8"); + query += "&id=" + java.net.URLEncoder.encode(this.id, "UTF-8"); + } catch(IOException e){ + logger.error("예외 상황 발생"); + } + return query; + } +} diff --git a/src/main/java/egovframework/itgcms/core/popup/service/MngrPopupService.java b/src/main/java/egovframework/itgcms/core/popup/service/MngrPopupService.java new file mode 100644 index 0000000..954bee3 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/popup/service/MngrPopupService.java @@ -0,0 +1,63 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.popup.service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import org.springframework.web.multipart.MultipartHttpServletRequest; +/** + * @파일명 : MngrPopupService.java + * @파일정보 : 팝업관리 서비스 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface MngrPopupService { + + /** + * 글 목록을 조회한다. + * @param mngrPopupSearchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List mngrPopupList(MngrPopupSearchVO mngrPopupSearchVO) throws IOException, SQLException; + + /** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrPopupListTotCnt(MngrPopupSearchVO mngrPopupSearchVO) throws IOException, SQLException; + + String mngrPopupRegistProc(MngrPopupVO mngrPopupVO, MultipartHttpServletRequest multiRequest) throws IOException, SQLException; + + MngrPopupVO mngrPopupView(MngrPopupSearchVO mngrPopupSearchVO) throws IOException, SQLException; + + String mngrPopupUpdateProc(MngrPopupVO mngrPopupVO, MultipartHttpServletRequest multiRequest) throws IOException, SQLException; + + void mngrPopupDelProc(MngrPopupVO mngrPopupVO)throws IOException, SQLException; + + void mngrPopupChkDelProc(MngrPopupVO mngrPopupVO)throws IOException, SQLException; + +} diff --git a/src/main/java/egovframework/itgcms/core/popup/service/MngrPopupVO.java b/src/main/java/egovframework/itgcms/core/popup/service/MngrPopupVO.java new file mode 100644 index 0000000..75f7301 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/popup/service/MngrPopupVO.java @@ -0,0 +1,197 @@ +package egovframework.itgcms.core.popup.service; + +import java.util.Date; + +public class MngrPopupVO extends MngrPopupSearchVO{ + /** + * + */ + private static final long serialVersionUID = -4455786024332025484L; + /** 팝업창 인덱스 */ + String popupIdx = ""; + /** 팝업구분(1:창, 2:존, 3:베너) */ + String popupType = ""; + /** 제목 */ + String popupTitle = ""; + /** 사용여부 */ + String popupUseyn = ""; + /** 시작일 */ + String popupSdt = ""; + /** 시작시간 */ + String popupStm = ""; + /** 종료일 */ + String popupEdt = ""; + /** 종료시간 */ + String popupEtm = ""; + /** 첨부이미지 */ + String popupImg = ""; + /** 대체텍스트 */ + String popupAlt = ""; + /** 링크주소 */ + String popupUrl = ""; + /** 링크구분 */ + String popupLinktype = ""; + /** 팝업창 가로 사이즈 */ + String popupWidth = "0"; + /** 팝업창 세로 사이즈 */ + String popupHeight = "0"; + /** 순서 */ + String popupOrder = ""; + /** 사이트코드 */ + String siteCodes = ""; + /** 작성일 */ + Date regdt; + /** 수정일 */ + Date upddt; + /** 삭제일 */ + Date deldt; + /** 작성자 */ + String regmemid = ""; + /** 수정자 */ + String updmemid = ""; + /** 삭제자 */ + String delmemid = ""; + /** 삭제여부 */ + String delyn = ""; + + + public String getPopupIdx() { + return popupIdx; + } + public void setPopupIdx(String popupIdx) { + this.popupIdx = popupIdx; + } + public String getPopupType() { + return popupType; + } + public void setPopupType(String popupType) { + this.popupType = popupType; + } + public String getPopupUseyn() { + return popupUseyn; + } + public void setPopupUseyn(String popupUseyn) { + this.popupUseyn = popupUseyn; + } + public String getPopupSdt() { + return popupSdt; + } + public void setPopupSdt(String popupSdt) { + this.popupSdt = popupSdt; + } + public String getPopupStm() { + return popupStm; + } + public void setPopupStm(String popupStm) { + this.popupStm = popupStm; + } + public String getPopupEdt() { + return popupEdt; + } + public void setPopupEdt(String popupEdt) { + this.popupEdt = popupEdt; + } + public String getPopupEtm() { + return popupEtm; + } + public void setPopupEtm(String popupEtm) { + this.popupEtm = popupEtm; + } + public String getPopupImg() { + return popupImg; + } + public void setPopupImg(String popupImg) { + this.popupImg = popupImg; + } + public String getPopupAlt() { + return popupAlt; + } + public void setPopupAlt(String popupAlt) { + this.popupAlt = popupAlt; + } + public String getPopupUrl() { + return popupUrl; + } + public void setPopupUrl(String popupUrl) { + this.popupUrl = popupUrl; + } + public String getPopupLinktype() { + return popupLinktype; + } + public void setPopupLinktype(String popupLinktype) { + this.popupLinktype = popupLinktype; + } + public String getPopupWidth() { + return popupWidth; + } + public void setPopupWidth(String popupWidth) { + this.popupWidth = popupWidth; + } + public String getPopupHeight() { + return popupHeight; + } + public void setPopupHeight(String popupHeight) { + this.popupHeight = popupHeight; + } + public String getPopupOrder() { + return popupOrder; + } + public void setPopupOrder(String popupOrder) { + this.popupOrder = popupOrder; + } + public String getSiteCodes() { + return siteCodes; + } + public void setSiteCodes(String siteCodes) { + this.siteCodes = siteCodes; + } + public Date getRegdt() { + return regdt; + } + public void setRegdt(Date regdt) { + this.regdt = regdt; + } + public Date getUpddt() { + return upddt; + } + public void setUpddt(Date upddt) { + this.upddt = upddt; + } + public Date getDeldt() { + return deldt; + } + public void setDeldt(Date deldt) { + this.deldt = deldt; + } + public String getRegmemid() { + return regmemid; + } + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + public String getUpdmemid() { + return updmemid; + } + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + public String getDelmemid() { + return delmemid; + } + public void setDelmemid(String delmemid) { + this.delmemid = delmemid; + } + public String getDelyn() { + return delyn; + } + public void setDelyn(String delyn) { + this.delyn = delyn; + } + public String getPopupTitle() { + return popupTitle; + } + public void setPopupTitle(String popupTitle) { + this.popupTitle = popupTitle; + } + +} diff --git a/src/main/java/egovframework/itgcms/core/popup/service/impl/MngrPopupMapper.java b/src/main/java/egovframework/itgcms/core/popup/service/impl/MngrPopupMapper.java new file mode 100644 index 0000000..aaa7be8 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/popup/service/impl/MngrPopupMapper.java @@ -0,0 +1,78 @@ +/* + * Copyright 2011 MOPAS(Ministry of Public Mngristration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.popup.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.itgcms.core.popup.service.MngrPopupSearchVO; +import egovframework.itgcms.core.popup.service.MngrPopupVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +/** + * popup에 관한 데이터처리 매퍼 클래스 + * + * @author 표준프레임워크센터 + * @since 2014.01.24 + * @version 1.0 + * @see
    + *  == 개정이력(Modification Information) ==
    + *
    + *          수정일          수정자           수정내용
    + *  ----------------    ------------    ---------------------------
    + *   2014.01.24        표준프레임워크센터          최초 생성
    + *
    + * 
    + */ +@Mapper("mngrPopupMapper") +public interface MngrPopupMapper { + + + + /** + * 글 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + List mngrPopupList(MngrPopupSearchVO searchVO) throws SQLException; + + /** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + int mngrPopupListTotCnt(MngrPopupSearchVO searchVO) throws SQLException; + + int mngrPopupRegistProc(MngrPopupVO popupVO) throws SQLException; + + void mngrPopupSiteRegistProc(EgovMap paramMap) throws SQLException; + + void mngrPopupSiteDeleteProc(EgovMap paramMap) throws SQLException; + + MngrPopupVO mngrPopupView(MngrPopupSearchVO searchVO) throws SQLException; + + void mngrPopupUpdateProc(MngrPopupVO popupVO) throws SQLException; + + void mngrPopupDelProc(MngrPopupVO popupVO)throws SQLException; + + void mngrPopupChkDelProc(MngrPopupVO popupVO)throws SQLException; + + String[] mngrGetPopupSite(MngrPopupSearchVO mngrPopupSearchVO)throws SQLException; + +} diff --git a/src/main/java/egovframework/itgcms/core/popup/service/impl/MngrPopupServiceImpl.java b/src/main/java/egovframework/itgcms/core/popup/service/impl/MngrPopupServiceImpl.java new file mode 100644 index 0000000..08c9f53 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/popup/service/impl/MngrPopupServiceImpl.java @@ -0,0 +1,189 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.popup.service.impl; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +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 org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.core.popup.service.MngrPopupSearchVO; +import egovframework.itgcms.core.popup.service.MngrPopupService; +import egovframework.itgcms.core.popup.service.MngrPopupVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +/** + * @파일명 : PopupServiceImpl.java + * @파일정보 : 팝업 서비스 구현 클래스 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Service("mngrPopupService") +public class MngrPopupServiceImpl extends EgovAbstractServiceImpl implements MngrPopupService { + + private static final Logger LOGGER = LoggerFactory.getLogger(MngrPopupServiceImpl.class); + + /** PopupDAO */ + // ibatis 사용 + /*@Resource(name="PopupDAO") + private PopupDAO popupDAO;*/ + // mybatis 사용 + @Resource(name="mngrPopupMapper") + private MngrPopupMapper mngrPopupMapper; + + /** ID Generation */ + @Resource(name="popupIdGnrService") + private EgovIdGnrService popupIdGnrService; + + /** + * 글 목록을 조회한다. + * @param mngrPopupSearchVO - 조회할 정보가 담긴 VO + * @return 글 목록 + * @exception Exception + */ + public List mngrPopupList(MngrPopupSearchVO mngrPopupSearchVO) throws IOException, SQLException { + return mngrPopupMapper.mngrPopupList(mngrPopupSearchVO); + } + + /** + * 글 총 갯수를 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 글 총 갯수 + * @exception + */ + public int mngrPopupListTotCnt(MngrPopupSearchVO mngrPopupSearchVO) throws IOException, SQLException { + return mngrPopupMapper.mngrPopupListTotCnt(mngrPopupSearchVO); + } + + public String mngrPopupRegistProc(MngrPopupVO mngrPopupVO, MultipartHttpServletRequest multiRequest) throws IOException, SQLException { + /** ID Generation Service */ + /*String popup_idx = popupIdGnrService.getNextStringId(); + mngrPopupVO.setPopupIdx(popup_idx); + */ + final Map files = multiRequest.getFileMap(); + + if(!mngrPopupVO.getSchPopupType().equals("4")){//모바일 팝업 + + HashMap hmFile = CommUtil.fileUpload(multiRequest.getFileMap(), "popupImg", "popup"); + mngrPopupVO.setPopupImg((String)hmFile.get("F_SAVENAME")); + } + + int resultCode = mngrPopupMapper.mngrPopupRegistProc(mngrPopupVO); + + String popup_idx = mngrPopupVO.getPopupIdx(); + + String[] siteCodes = multiRequest.getParameterValues("siteCode"); + //사이트코드 등록 + if(siteCodes != null){ + for(int i=0;i files = multiRequest.getFileMap(); + + HashMap hmFile = CommUtil.fileUpload(multiRequest.getFileMap(), "popupImg", "popup"); + + if(!mngrPopupVO.getSchPopupType().equals("4")){//모바일 팝업 + + if(hmFile == null){ + if("".equals(CommUtil.isNull(multiRequest.getParameter("oldFile"), ""))){ + return "이미지를 첨부 해 주세요."; + }else { + mngrPopupVO.setPopupImg((String)multiRequest.getParameter("oldFile")); + } + }else { + mngrPopupVO.setPopupImg((String)hmFile.get("F_SAVENAME")); + } + } + + mngrPopupMapper.mngrPopupUpdateProc(mngrPopupVO); + + String[] siteCodes = multiRequest.getParameterValues("siteCode"); + + //등록전 기존 코드 삭제 + ItgMap paramMap = new ItgMap(); + paramMap.put("popupIdx", mngrPopupVO.getId()); + paramMap.put("siteCode", ""); + mngrPopupMapper.mngrPopupSiteDeleteProc(paramMap); + + //사이트코드 등록 + if(siteCodes != null){ + for(int i=0;i mngrSiteList(); + + List selectSiteList(); + + MngrSiteVO getSiteView(MngrSiteSearchVO mngrSiteSearchVO) throws IOException, SQLException; + + MngrSiteVO selectSiteView(MngrSiteSearchVO mngrSiteSearchVO) throws IOException, SQLException; + + int mngrSiteDupleCheck(MngrSiteVO mngrSiteVO) throws IOException, SQLException; + + void mngrSiteRegistProc(MngrSiteVO mngrSiteVO) throws IOException, SQLException; + + void mngrSiteUpdateProc(MngrSiteVO mngrSiteVO) throws IOException, SQLException; + + void mngrSiteDelProc(MngrSiteVO mngrSiteVO) throws IOException, SQLException; +} diff --git a/src/main/java/egovframework/itgcms/core/site/service/MngrSiteVO.java b/src/main/java/egovframework/itgcms/core/site/service/MngrSiteVO.java new file mode 100644 index 0000000..15169de --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/site/service/MngrSiteVO.java @@ -0,0 +1,26 @@ +package egovframework.itgcms.core.site.service; + + +public class MngrSiteVO extends MngrSiteSearchVO{ + /** + * + */ + private static final long serialVersionUID = -1348350626383443851L; + /** 메뉴 코드 */ + String siteCode = ""; + /** 메뉴 이름 */ + String siteName = ""; + + public String getSiteCode() { + return siteCode; + } + public void setSiteCode(String siteCode) { + this.siteCode = siteCode; + } + public String getSiteName() { + return siteName; + } + public void setSiteName(String siteName) { + this.siteName = siteName; + } +} diff --git a/src/main/java/egovframework/itgcms/core/site/service/impl/MngrSiteMapper.java b/src/main/java/egovframework/itgcms/core/site/service/impl/MngrSiteMapper.java new file mode 100644 index 0000000..c955932 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/site/service/impl/MngrSiteMapper.java @@ -0,0 +1,54 @@ +/* + * Copyright 2011 MOPAS(Ministry of Public Mngristration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.site.service.impl; + +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +import egovframework.itgcms.core.site.service.MngrSiteSearchVO; +import egovframework.itgcms.core.site.service.MngrSiteVO; + +/** + * site에 관한 데이터처리 매퍼 클래스 + * + * @author 표준프레임워크센터 + * @since 2014.01.24 + * @version 1.0 + * @see
    + *  == 개정이력(Modification Information) ==
    + *
    + *          수정일          수정자           수정내용
    + *  ----------------    ------------    ---------------------------
    + *   2014.01.24        표준프레임워크센터          최초 생성
    + *
    + * 
    + */ +@Mapper("mngrSiteMapper") +public interface MngrSiteMapper { + + List mngrSiteList(); + + MngrSiteVO mngrSiteView(MngrSiteSearchVO mngrSiteSearchVO); + + int mngrSiteDupleCheck(MngrSiteVO mngrSiteVO); + + void mngrSiteRegistProc(MngrSiteVO mngrSiteVO); + + void mngrSiteUpdateProc(MngrSiteVO mngrSiteVO); + + void mngrSiteDelProc(MngrSiteVO mngrSiteVO); +} diff --git a/src/main/java/egovframework/itgcms/core/site/service/impl/MngrSiteServiceImpl.java b/src/main/java/egovframework/itgcms/core/site/service/impl/MngrSiteServiceImpl.java new file mode 100644 index 0000000..a802d74 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/site/service/impl/MngrSiteServiceImpl.java @@ -0,0 +1,144 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.site.service.impl; + +import java.io.IOException; +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.itgcms.core.authority.service.impl.MngrAuthorityMapper; +import egovframework.itgcms.core.menu.service.MngrMenuVO; +import egovframework.itgcms.core.menu.service.impl.MngrMenuMapper; +import egovframework.itgcms.core.site.service.MngrSiteSearchVO; +import egovframework.itgcms.core.site.service.MngrSiteService; +import egovframework.itgcms.core.site.service.MngrSiteVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * @파일명 : SiteServiceImpl.java + * @파일정보 : 팝업 서비스 구현 클래스 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Service("mngrSiteService") +public class MngrSiteServiceImpl extends EgovAbstractServiceImpl implements MngrSiteService { + + private static final Logger LOGGER = LoggerFactory.getLogger(MngrSiteServiceImpl.class); + + /** SiteDAO */ + // ibatis 사용 + /*@Resource(name="SiteDAO") + private SiteDAO siteDAO;*/ + // mybatis 사용 + @Resource(name="mngrSiteMapper") + private MngrSiteMapper mngrSiteMapper; + + @Resource(name="mngrMenuMapper") + private MngrMenuMapper mngrMenuMapper; + + @Resource(name="mngrAuthorityMapper") + private MngrAuthorityMapper mngrAuthorityMapper; + + @Override + public List selectSiteList() { + return mngrSiteMapper.mngrSiteList(); + } + + @Override + public List mngrSiteList() { + return mngrSiteMapper.mngrSiteList(); + } + + @Override + public MngrSiteVO getSiteView(MngrSiteSearchVO mngrSiteSearchVO) { + return mngrSiteMapper.mngrSiteView(mngrSiteSearchVO); + } + + @Override + public MngrSiteVO selectSiteView(MngrSiteSearchVO mngrSiteSearchVO) { + return mngrSiteMapper.mngrSiteView(mngrSiteSearchVO); + } + + @Override + public int mngrSiteDupleCheck(MngrSiteVO mngrSiteVO) { + return mngrSiteMapper.mngrSiteDupleCheck(mngrSiteVO); + } + + @Override + public void mngrSiteRegistProc(MngrSiteVO mngrSiteVO) throws IOException, SQLException{ + MngrMenuVO mngrMenuVO = new MngrMenuVO(); + mngrMenuVO.setMenuCode(mngrSiteVO.getSiteCode()); //메뉴코드 + mngrMenuVO.setMenuName(mngrSiteVO.getSiteName()); //메뉴이름 + mngrMenuVO.setMenuType("5"); //컨텐츠타입 + mngrMenuVO.setMenuUseyn("Y"); //사용여부 + mngrMenuVO.setRegmemid(CommUtil.getMngrMemId()); //등록자 아이디 + mngrMenuVO.setMenuShowtype("0"); //링크타입 + mngrMenuVO.setMenuChargeuseyn("N"); //담당자정보사용여부 + mngrMenuVO.setMenuUsetype("0"); //사용타입 + mngrMenuVO.setMenuQruseyn("Y"); //QR사용여부 + mngrMenuVO.setId("0"); //부모코드(1뎁스는 부모코드가 0) + mngrMenuMapper.mngrMenuRegistProc(mngrMenuVO); + + mngrSiteMapper.mngrSiteRegistProc(mngrSiteVO); + } + + @Override + public void mngrSiteUpdateProc(MngrSiteVO mngrSiteVO) throws IOException, SQLException { + + MngrMenuVO mngrMenuVO = new MngrMenuVO(); + mngrMenuVO.setId(mngrSiteVO.getId()); + + MngrMenuVO menuVO = mngrMenuMapper.mngrMenuView(mngrMenuVO); + if(menuVO == null) throw new IOException("메뉴 정보가 없습니다."); + menuVO.setMenuOldpfullname(menuVO.getMenuPfullname()); + menuVO.setMenuPfullcode("");//1뎁스의 부모 code는 없음. + menuVO.setMenuPfullname("");//1뎁스의 부모 이름은 없음. + menuVO.setMenuName(mngrSiteVO.getSiteName()); + menuVO.setId(mngrSiteVO.getId()); + + // 메뉴관리의 메뉴명 일괄 수정 + mngrMenuMapper.mngrMenuUpdateProcSubmenufullname(menuVO); + // 메뉴명 변경을 위해 Update + mngrMenuMapper.mngrMenuUpdateProc(menuVO); + + // 사이트관리의 사이트명 수정 + mngrSiteMapper.mngrSiteUpdateProc(mngrSiteVO); + } + + @Override + public void mngrSiteDelProc(MngrSiteVO mngrSiteVO) throws IOException, SQLException { + //권한삭제 + mngrAuthorityMapper.mngrAuthorityDelAllSiteMenu(mngrSiteVO); + //메뉴삭제 + mngrMenuMapper.mngrMenuDelAllSiteMenu(mngrSiteVO); + //사이트 삭제 + mngrSiteMapper.mngrSiteDelProc(mngrSiteVO); + } +} diff --git a/src/main/java/egovframework/itgcms/core/systemconfig/service/SystemconfigVO.java b/src/main/java/egovframework/itgcms/core/systemconfig/service/SystemconfigVO.java new file mode 100644 index 0000000..05be859 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/systemconfig/service/SystemconfigVO.java @@ -0,0 +1,410 @@ +package egovframework.itgcms.core.systemconfig.service; + +import java.io.IOException; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +public class SystemconfigVO implements Serializable{ + + /** + * 시스템 환경설정 VO + * 파일로 저장됨 + */ + private static final long serialVersionUID = -3170863716715843435L; + + + String sysName = "큐브씨엠에스 v3.0"; // 시스템이름 + String domainAddr = "localhost"; // 도메인주소 + String siteGubun = "1"; // 사이트구분 1.서브디렉토리방식, 2.서브도메인방식 + String underConstr = "2"; // 공사중페이지 1.사용 2.미사용 + String underConstrImg = "/"; // 공사중페이지 이미지 + String licenseType = ""; // 라이센스타입 + + String tempCode = "a"; // 템플릿코드 + String titleName = "큐브씨엠에스 v3.0"; // 웹타이틀이름 + String titleNameCode = "1"; // 웹타이틀이름 코드 + String faviUrl = "/"; // favicon경로 + String siteLogogubun = "1"; // 사이트로고설정 1.사이트명 사용, 2.이미지등록사용 + String siteLogo = "/"; // 사이트로고이미지 + String oldsiteLogo = ""; // 사이트로고이미지(기존) + String slidesIdx = "0"; // 슬라이드인덱스 + String sitePageType = "0"; // 사이트페이지타입 + + //헤더설정 관련 + String totalSearch = "2"; + String toHomeUseYn = "Y"; + String siteMapUseYn = "Y"; + String userLoginUseYn = "Y"; + String joinUseYn = "Y"; + String pollUseYn = "Y"; + + Map recentBoardMap = new HashMap<>(); + + //SNS관련 + String formCode = "sns1"; //소셜페이지 폼 + String fbUseYn = ""; //페이스북 사용 설정 + String twUseYn = ""; //트위터 사용 설정 + String nbUseYn = ""; //네이버 블로그 사용 설정 + String igUseYn = ""; //인스타그램 사용 설정 + String faceBookId = ""; //페이스북 페이지 ID + String twitterId = ""; //트위터 ID + String igId = ""; //인스타그램 ID + String nBlogId = ""; //네이버 블로그 ID + String fbProm; //페이스북 홍보 문구 + String twProm; //트위터 홍보 문구 + String igProm; //인스타그램 홍보 문구 + String nbProm; //네이버블로그 홍보 문구 + + // 회원 독립 구분 사용 유무 + boolean memIndependent = false; + + // 회원 세션 타임 (초단위) + int memSessionTime = 600; + /* + * 로그인 후 리턴 타입 + * 0 : 요청한 페이지 + * 1 : 메인 페이지 + * 3 : 특정 메뉴 + */ + int loginRtType = 0; + + /* + * 로그인 후 리턴 메뉴코드 + * 로그인 후 리턴 타입 (loginRtPgType) 이 2일때 사용 + */ + String loginRtMeunCode = ""; + + public String getSysName() { + return sysName; + } + + public void setSysName(String sysName) { + this.sysName = sysName; + } + + public String getDomainAddr() { + return domainAddr; + } + + public void setDomainAddr(String domainAddr) { + this.domainAddr = domainAddr; + } + + public String getSiteGubun() { + return siteGubun; + } + + public void setSiteGubun(String siteGubun) { + this.siteGubun = siteGubun; + } + + public String getUnderConstr() { + return underConstr; + } + + public void setUnderConstr(String underConstr) { + this.underConstr = underConstr; + } + + public String getUnderConstrImg() { + return underConstrImg; + } + + public void setUnderConstrImg(String underConstrImg) { + this.underConstrImg = underConstrImg; + } + + public String getTempCode() { + return tempCode; + } + + public void setTempCode(String tempCode) { + this.tempCode = tempCode; + } + + public String getTitleName() { + return titleName; + } + + public void setTitleName(String titleName) { + this.titleName = titleName; + } + + public String getTitleNameCode() { + return titleNameCode; + } + + public void setTitleNameCode(String titleNameCode) { + this.titleNameCode = titleNameCode; + } + + public String getFaviUrl() { + return faviUrl; + } + + public void setFaviUrl(String faviUrl) { + this.faviUrl = faviUrl; + } + + public String getSiteLogogubun() { + return siteLogogubun; + } + + public void setSiteLogogubun(String siteLogogubun) { + this.siteLogogubun = siteLogogubun; + } + + public String getSiteLogo() { + return siteLogo; + } + + public void setSiteLogo(String siteLogo) { + this.siteLogo = siteLogo; + } + + public String getOldsiteLogo() { + return oldsiteLogo; + } + + public void setOldsiteLogo(String oldsiteLogo) { + this.oldsiteLogo = oldsiteLogo; + } + + public String getSlidesIdx() { + return slidesIdx; + } + + public void setSlidesIdx(String slidesIdx) { + this.slidesIdx = slidesIdx; + } + + public String getSitePageType() { + return sitePageType; + } + + public void setSitePageType(String sitePageType) { + this.sitePageType = sitePageType; + } + + public void setRecentBoardMap(Map recentBoardMap) { + if (recentBoardMap != null){ + this.recentBoardMap = new HashMap<>(recentBoardMap); + } + } + + public Map getRecentBoardMap() { + return this.recentBoardMap; + } + + public String[] getRecentBoardByTempCode(){ + return this.recentBoardMap.get(this.tempCode); + } + public String[] getRecentBoardByTempCode(String tempCode){ + if (recentBoardMap == null || recentBoardMap.get(tempCode) == null) { + return null; + } + return this.recentBoardMap.get(tempCode); + } + + + //Header setting getter setter + public String getTotalSearch() { + return totalSearch; + } + + public void setTotalSearch(String totalSearch) { + this.totalSearch = totalSearch; + } + + public String getToHomeUseYn() { + return toHomeUseYn; + } + + public void setToHomeUseYn(String toHomeUseYn) { + this.toHomeUseYn = toHomeUseYn; + } + + public String getSiteMapUseYn() { + return siteMapUseYn; + } + + public void setSiteMapUseYn(String siteMapUseYn) { + this.siteMapUseYn = siteMapUseYn; + } + + public String getUserLoginUseYn() { + return userLoginUseYn; + } + + public void setUserLoginUseYn(String userLoginUseYn) { + this.userLoginUseYn = userLoginUseYn; + } + + public String getJoinUseYn() { + return joinUseYn; + } + + public void setJoinUseYn(String joinUseYn) { + this.joinUseYn = joinUseYn; + } + + public String getPollUseYn() { + return pollUseYn; + } + + public void setPollUseYn(String pollUseYn) { + this.pollUseYn = pollUseYn; + } + + //SNS getter setter + public String getFaceBookId() { + return faceBookId; + } + + public String getFbUseYn() { + return fbUseYn; + } + + public void setFbUseYn(String fbUseYn) { + this.fbUseYn = fbUseYn; + } + + public String getTwUseYn() { + return twUseYn; + } + + public void setTwUseYn(String twUseYn) { + this.twUseYn = twUseYn; + } + + public String getNbUseYn() { + return nbUseYn; + } + + public void setNbUseYn(String nbUseYn) { + this.nbUseYn = nbUseYn; + } + + public String getIgUseYn() { + return igUseYn; + } + + public void setIgUseYn(String igUseYn) { + this.igUseYn = igUseYn; + } + + public String getFormCode() { + return formCode; + } + + public void setFormCode(String formCode) { + this.formCode = formCode; + } + + public void setFaceBookId(String faceBookId) { + this.faceBookId = faceBookId; + } + + public String getTwitterId() { + return twitterId; + } + + public void setTwitterId(String twitterId) { + this.twitterId = twitterId; + } + + public String getnBlogId() { + return nBlogId; + } + + public void setnBlogId(String nBlogId) { + this.nBlogId = nBlogId; + } + + public String getIgId() { + return igId; + } + + public void setIgId(String igId) { + this.igId = igId; + } + + public String getFbProm() { + return fbProm; + } + + public void setFbProm(String fbProm) { + this.fbProm = fbProm; + } + + public String getTwProm() { + return twProm; + } + + public void setTwProm(String twProm) { + this.twProm = twProm; + } + + public String getIgProm() { + return igProm; + } + + public void setIgProm(String igProm) { + this.igProm = igProm; + } + + public String getNbProm() { + return nbProm; + } + + public void setNbProm(String nbProm) { + this.nbProm = nbProm; + } + + public void setMemIndependent(boolean memIndependent) { + this.memIndependent = memIndependent; + } + + public boolean isMemIndependent() { + return memIndependent; + } + + public int getMemSessionTime() { + if (memSessionTime==0) { + return 600; + } + return memSessionTime; + } + + public void setMemSessionTime(int memSessionTime) { + this.memSessionTime = memSessionTime; + } + + public int getLoginRtType() { + return loginRtType; + } + + public void setLoginRtType(int loginRtType) { + this.loginRtType = loginRtType; + } + + public String getLoginRtMeunCode() { + return loginRtMeunCode; + } + + public void setLoginRtMeunCode(String loginRtMeunCode) { + this.loginRtMeunCode = loginRtMeunCode; + } + + public String getLicenseType(HttpServletRequest request) throws IOException { + EgovMap licenseVO = CommUtil.getSystemLicenseVO(request, "license"); + this.licenseType = licenseVO.get("licenseType").toString(); + return licenseType; + } +} diff --git a/src/main/java/egovframework/itgcms/core/templeteconfig/service/TempleteconfigService.java b/src/main/java/egovframework/itgcms/core/templeteconfig/service/TempleteconfigService.java new file mode 100644 index 0000000..e830b30 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/templeteconfig/service/TempleteconfigService.java @@ -0,0 +1,79 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.templeteconfig.service; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import egovframework.rte.psl.dataaccess.util.EgovMap; +/** + * @파일명 : TempleteconfigService.java + * @파일정보 : 템플릿 관리 서비스 interface + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2017. 4. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ +public interface TempleteconfigService { + + /** + * 템플릿 목록을 조회한다. + * @param searchVO - 조회할 정보가 담긴 VO + * @return 템플릿 목록 + */ + List templeteconfigList(); + + /** + * 템플릿 갯수를 조회한다. + * @param eMap - 조회할 정보가 담긴 VO + * @return 템플릿 갯수 + */ + int templeteconfigListTotCnt(); + + /** + * 템플릿 정보를 조회한다. + * @param eMap - 조회할 정보가 담긴 VO + * @return 템플릿 정보 + */ + EgovMap getTempleteconfig(EgovMap eMap); + + /** + * 템플릿 정보를 추가한다. + * @param eMap - 추가할 정보가 담긴 VO + * @return 신규 추가된 템플릿 idx + */ + int templeteconfigRegistProc(EgovMap eMap); + + /** + * 템플릿 정보를 수정한다. + * @param eMap - 수정할 정보가 담긴 VO + * @return 업데이트 성공 건수 + */ + int templeteconfigUpdateProc(EgovMap eMap); + + /** + * 템플릿 정보를 삭제한다. + * @param eMap - 삭제할 정보가 담긴 VO + * @return 삭제 성공 건수 + */ + int templeteconfigDeleteProc(EgovMap eMap); +} \ No newline at end of file diff --git a/src/main/java/egovframework/itgcms/core/templeteconfig/service/TempleteconfigVO.java b/src/main/java/egovframework/itgcms/core/templeteconfig/service/TempleteconfigVO.java new file mode 100644 index 0000000..788e450 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/templeteconfig/service/TempleteconfigVO.java @@ -0,0 +1,94 @@ +package egovframework.itgcms.core.templeteconfig.service; + +import java.io.Serializable; + +public class TempleteconfigVO implements Serializable{ + + /** + * 시스템 환경설정 VO + * 파일로 저장됨 + */ + + private static final long serialVersionUID = -3134203173384951936L; + + String tempIdx = ""; // 템플릿인덱스 + String tempCode = ""; // 템플릿코드 + String tempName = "템플릿이름"; // 템플릿이름 + String recentBdCnt = "1"; // 최신글게시판영역개수 + String temp_etc1 = ""; // 여분필드1 + String temp_etc2 = ""; // 여분필드2 + String useyn = ""; // 사용여부 + String regdt = ""; // 등록일 + String upddt = ""; // 수정일 + String regmemid = ""; // 등록아이디 + String updmemid = ""; // 수정아이디 + + + public String getTempIdx() { + return tempIdx; + } + public void setTempIdx(String tempIdx) { + this.tempIdx = tempIdx; + } + public String getTempCode() { + return tempCode; + } + public void setTempCode(String tempCode) { + this.tempCode = tempCode; + } + public String getTempName() { + return tempName; + } + public void setTempName(String tempName) { + this.tempName = tempName; + } + public String getRecentBdCnt() { + return recentBdCnt; + } + public void setRecentBdCnt(String recentBdCnt) { + this.recentBdCnt = recentBdCnt; + } + public String getTemp_etc1() { + return temp_etc1; + } + public void setTemp_etc1(String temp_etc1) { + this.temp_etc1 = temp_etc1; + } + public String getTemp_etc2() { + return temp_etc2; + } + public void setTemp_etc2(String temp_etc2) { + this.temp_etc2 = temp_etc2; + } + public String getUseyn() { + return useyn; + } + public void setUseyn(String useyn) { + this.useyn = useyn; + } + public String getRegdt() { + return regdt; + } + public void setRegdt(String regdt) { + this.regdt = regdt; + } + public String getUpddt() { + return upddt; + } + public void setUpddt(String upddt) { + this.upddt = upddt; + } + public String getRegmemid() { + return regmemid; + } + public void setRegmemid(String regmemid) { + this.regmemid = regmemid; + } + public String getUpdmemid() { + return updmemid; + } + public void setUpdmemid(String updmemid) { + this.updmemid = updmemid; + } + +} diff --git a/src/main/java/egovframework/itgcms/core/templeteconfig/service/impl/TempleteconfigMapper.java b/src/main/java/egovframework/itgcms/core/templeteconfig/service/impl/TempleteconfigMapper.java new file mode 100644 index 0000000..3dc6189 --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/templeteconfig/service/impl/TempleteconfigMapper.java @@ -0,0 +1,85 @@ +/* + * Copyright 2011 MOPAS(Ministry of Public Mngristration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.templeteconfig.service.impl; + +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +import egovframework.itgcms.core.templeteconfig.service.TempleteconfigVO; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +/** + * 접속로그에 관한 데이터처리 매퍼 클래스 + * + * @author 아이티굿 + * @since 2017.04.04 + * @version 1.0 + * @see
    + *  == 개정이력(Modification Information) ==
    + *
    + *          수정일          수정자           수정내용
    + *  ----------------    ------------    ---------------------------
    + *   2017.04.04              장청직          최초 생성
    + *
    + * 
    + */ +@Mapper("templeteconfigMapper") +public interface TempleteconfigMapper { + + /** + * 템플릿 목록을 조회한다. + * @param 없음 + * @return 템플릿 목록 + */ + List templeteconfigList(); + + /** + * 템플릿 목록의 전체 갯수를 조회한다. + * @param 없음 + * @return 템플릿 전체 개수 + */ + int templeteconfigListTotCnt(); + + /** + * 템플릿 정보를 조회한다. + * @param emap - 조회할 정보가 담긴 VO + * @return 템플릿 정보 + */ + EgovMap getTempleteconfig(EgovMap eMap); + + /** + * 템플릿 정보를 추가한다. + * @param eMap - 추가할 정보가 담긴 VO + * @return 신규 추가된 템플릿 idx + */ + int templeteconfigRegistProc(EgovMap eMap); + + /** + * 템플릿 정보를 수정한다. + * @param eMap - 수정할 정보가 담긴 VO + * @return 업데이트 성공 건수 + */ + int templeteconfigUpdateProc(EgovMap eMap); + + /** + * 템플릿 정보를 삭제한다. + * @param eMap - 삭제할 정보가 담긴 VO + * @return 삭제 성공 건수 + */ + int templeteconfigDeleteProc(EgovMap eMap); + +} diff --git a/src/main/java/egovframework/itgcms/core/templeteconfig/service/impl/TempleteconfigServiceImpl.java b/src/main/java/egovframework/itgcms/core/templeteconfig/service/impl/TempleteconfigServiceImpl.java new file mode 100644 index 0000000..dc6941b --- /dev/null +++ b/src/main/java/egovframework/itgcms/core/templeteconfig/service/impl/TempleteconfigServiceImpl.java @@ -0,0 +1,92 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.itgcms.core.templeteconfig.service.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import egovframework.itgcms.core.templeteconfig.service.TempleteconfigService; +import egovframework.itgcms.core.templeteconfig.service.TempleteconfigVO; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +/** + * @파일명 : SiteServiceImpl.java + * @파일정보 : 팝업 서비스 구현 클래스 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 5. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Service("templeteconfigService") +public class TempleteconfigServiceImpl extends EgovAbstractServiceImpl implements TempleteconfigService { + + private static final Logger LOGGER = LoggerFactory.getLogger(TempleteconfigServiceImpl.class); + + /** SiteDAO */ + // ibatis 사용 + /*@Resource(name="SiteDAO") + private SiteDAO siteDAO;*/ + // mybatis 사용 + @Resource(name="templeteconfigMapper") + private TempleteconfigMapper templeteconfigMapper; + + @Override + public List templeteconfigList() { + // TODO Auto-generated method stub + return templeteconfigMapper.templeteconfigList(); + } + + @Override + public int templeteconfigListTotCnt() { + // TODO Auto-generated method stub + return templeteconfigMapper.templeteconfigListTotCnt(); + } + + @Override + public EgovMap getTempleteconfig(EgovMap eMap) { + // TODO Auto-generated method stub + return templeteconfigMapper.getTempleteconfig(eMap); + } + + @Override + public int templeteconfigRegistProc(EgovMap eMap) { + // TODO Auto-generated method stub + return templeteconfigMapper.templeteconfigRegistProc(eMap); + } + + @Override + public int templeteconfigUpdateProc(EgovMap eMap) { + // TODO Auto-generated method stub + return templeteconfigMapper.templeteconfigUpdateProc(eMap); + } + + @Override + public int templeteconfigDeleteProc(EgovMap eMap) { + // TODO Auto-generated method stub + return templeteconfigMapper.templeteconfigDeleteProc(eMap); + } +} diff --git a/src/main/java/egovframework/itgcms/mngr/authority/web/MngrAuthorityController.java b/src/main/java/egovframework/itgcms/mngr/authority/web/MngrAuthorityController.java new file mode 100644 index 0000000..279f633 --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/authority/web/MngrAuthorityController.java @@ -0,0 +1,514 @@ +package egovframework.itgcms.mngr.authority.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.itgcms.core.authority.service.MngrAuthoritySearchVO; +import egovframework.itgcms.core.authority.service.MngrAuthorityService; +import egovframework.itgcms.core.authority.service.MngrAuthorityVO; +import egovframework.itgcms.core.authority.service.MngrPowerVO; +import egovframework.itgcms.core.authority.service.MngrRoleVO; +import egovframework.itgcms.core.code.service.MngrCodeService; +import egovframework.itgcms.core.main.service.MngrMainService; +import egovframework.itgcms.core.main.service.MngrManagerMenuVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; + + +/** + * @파일명 : MngrAuthorityController.java + * @파일정보 : 컨텐츠 권한 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class MngrAuthorityController { + + /** mngrMainService */ + @Resource(name = "mngrMainService") + private MngrMainService mngrMainService; + + /** MngrAuthorityService */ + @Resource(name = "mngrAuthorityService") + private MngrAuthorityService mngrAuthorityService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** mngrCodeService */ + @Resource(name = "mngrCodeService") + private MngrCodeService mngrCodeService; + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + + + private static final Logger logger = LogManager.getLogger(MngrAuthorityController.class); + + /** + * 컨텐츠 권한 메인. (paging) + * @param mngrAuthoritySearchVO - 조회할 정보가 담긴 PopopSearchVO + * @param model + * @return "itgcms/mngr/authority/_mngr_authorityList" + * @exception Exception + */ + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityMain.do") + public String mngrAuthorityMain(@ModelAttribute("searchVO") MngrAuthoritySearchVO mngrAuthoritySearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + + + List resultList = mngrAuthorityService.selectMngrRoleList(); + model.addAttribute("resultList", resultList); + return "itgcms/mngr/authority/mngrAuthorityMain"; + } + + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityRegistProc.do") + public String mngrAuthorityRegistProc(MngrAuthorityVO mngrAuthorityVO, MngrRoleVO mngrRoleVO,ModelMap model) throws IOException, SQLException, RuntimeException { + if("".equals(mngrRoleVO.getRoleName())) CommUtil.doComplete(model, "오류", "권한 롤명을 입력 해 주세요", "history.back()"); + else if("".equals(mngrAuthorityVO.getMenuCodes())) CommUtil.doComplete(model, "오류", "메뉴를 선택 해 주세요", "history.back()"); + mngrRoleVO.setRegmemid(CommUtil.getMngrMemId()); + mngrAuthorityService.insertMngrAuthorityRegistProc(mngrRoleVO, mngrAuthorityVO.getMenuCodes()); + return CommUtil.doComplete(model, "완료", "등록이 완료 되었습니다.", "location.href='mngrAuthorityMain.do';"); + } + + /** + * 수정 페이지 + * @param mngrAuthoritySearchVO + * @param model + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityViewAjax.do") + public void mngrAuthorityViewAjax(MngrAuthorityVO mngrAuthorityVO, ModelMap model, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + /** + *메뉴권한은 t_role의 role_idx 와 조인되어 사용되는 권한과(auth_type = 1) + *t_manager의 mng_id 와 조인되어 사용되는 권한(auth_type = 0) 이 있다. + * + *권한관리에서는 auth_type 1만 사용 + *관리자관리 의 권한 관리에서는 두가지를 모두 사용한다. + + */ + String result = "0"; + MngrRoleVO mngrRoleVO = mngrAuthorityService.mSelectMngrRoleView(mngrAuthorityVO); + List authList = mngrAuthorityService.selectMngrAuthorityViewAjax(mngrAuthorityVO); + String json = "[{"; + + if(mngrRoleVO == null && !"0".equals(mngrAuthorityVO.getAuthType())) result = "3"; // 권한 롤 정보가 없습니다. + else if(mngrRoleVO != null){ + json+= "\"roleIdx\":\""+mngrRoleVO.getRoleIdx()+"\","; + json+= "\"roleName\":\""+mngrRoleVO.getRoleName()+"\","; + } + if(authList.size() == 0) result = "4"; // 메뉴 권한 정보가 없습니다. + else { + json+= "\"authorityList\":\""; + for(int i = 0; i < authList.size(); i++){ + MngrAuthorityVO tmpMngrAuthorityVO = (MngrAuthorityVO)authList.get(i); + json += tmpMngrAuthorityVO.getMenuCode(); + if(i < authList.size() - 1){ + json += "|"; + } + } + json += "\","; + result = "1"; + } + json+= "\"result\":\""+result+"\""; + json += "}]"; + CommUtil.printWriter(json, response); + } + + + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityUpdateProc.do") + public String mngrAuthorityUpdateProc(MngrAuthorityVO mngrAuthorityVO, MngrRoleVO mngrRoleVO,ModelMap model) throws IOException, SQLException, RuntimeException { + if("".equals(mngrRoleVO.getRoleIdx())) CommUtil.doComplete(model, "오류", "권한 롤 인덱스 정보가 없습니다.", "history.back()"); + else if("".equals(mngrRoleVO.getRoleName())) CommUtil.doComplete(model, "오류", "권한 롤명을 입력 해 주세요", "history.back()"); + else if("".equals(mngrAuthorityVO.getMenuCodes())) CommUtil.doComplete(model, "오류", "메뉴를 선택 해 주세요", "history.back()"); + mngrRoleVO.setUpdmemid(CommUtil.getMngrMemId()); + mngrAuthorityService.updateMngrAuthorityUpdateProc(mngrRoleVO, mngrAuthorityVO.getMenuCodes()); + return CommUtil.doComplete(model, "완료", "수정이 완료 되었습니다.", "location.href='mngrAuthorityMain.do';"); + } + + + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityDeleteProc.do") + public String mngrAuthorityDeleteProc(MngrAuthorityVO mngrAuthorityVO, MngrRoleVO mngrRoleVO,ModelMap model) throws IOException, SQLException, RuntimeException { + if("".equals(mngrRoleVO.getRoleIdx())) CommUtil.doComplete(model, "오류", "권한 롤을 선택해 주세요.", "history.back()"); + mngrRoleVO.setDelmemid(CommUtil.getMngrMemId()); + mngrAuthorityService.deleteMngrAuthorityDeleteProc(mngrRoleVO, mngrAuthorityVO); + return CommUtil.doComplete(model, "완료", "삭제가 완료 되었습니다.", "location.href='mngrAuthorityMain.do';"); + } + + + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityUpdateManagerAuth.do") + public void mngrAuthorityUpdateManagerAuth(MngrAuthorityVO mngrAuthorityVO,ModelMap model, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String result = "0"; + if("".equals(mngrAuthorityVO.getRoleIdx())) result = "2"; // 권한 롤 정보가 없습니다. + else if(mngrAuthorityVO.getChkId() == null || mngrAuthorityVO.getChkId().length == 0) result = "3"; // 권한을 적용 할 관리자를 선택 해 주세요. + + mngrAuthorityService.updateMngrAuthorityUpdateManagerAuth(mngrAuthorityVO); + result = "1"; + CommUtil.printWriter("{\"result\":\""+result+"\"}", response); + } + + + /** + * 관리자 권한 메인. (paging) + * @param mngrAuthoritySearchVO - 조회할 정보가 담긴 PopopSearchVO + * @param model + * @return "itgcms/mngr/authority/_mngr_authorityList" + * @exception Exception + */ + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityPowerMain.do") + public String mngrAuthorityPowerMain(@ModelAttribute("searchVO") MngrAuthoritySearchVO mngrAuthoritySearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + + + List resultList = mngrAuthorityService.selectMngrPowerList(); + model.addAttribute("resultList", resultList); + return "itgcms/mngr/authority/mngrAuthorityPowerMain"; + } + + /** + * 관리자 메뉴 목록 ajax + * @param pcode + * @param response + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/authority/treeMenuList.ajax") + public void treeMenuList(String auth , HttpServletResponse response) throws IOException, SQLException, RuntimeException { + + + auth = CommUtil.getMngrSessionVO().getMngAuth(); + List result = mngrMainService.mngrTreeMenuList(auth); + String json = "["; + for(int i = 0; i < result.size(); i++){ + MngrManagerMenuVO menuVO = result.get(i); + json += "{" + + "\"id\": \"" + menuVO.getMenuCode() + "\" " + + ",\"name\": \"" + menuVO.getMenuName() + "\" " + + ",\"pId\": \"" + menuVO.getMenuPcode() + "\" " + + ",\"depth\": \"" + menuVO.getMenuDepth() + "\" " + /*+ ",\"useType\": \"" + menuVO.getMenuUsetype() + "\" "*/ + + "}" ; + if(i < result.size() - 1){ + json += ","; + } + } + json += "]"; + CommUtil.printWriter(json, response); + } + + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityPowerRegistProc.do") + public String mngrAuthorityPowerRegistProc(MngrAuthorityVO mngrAuthorityVO, MngrPowerVO mngrPowerVO,ModelMap model) throws IOException, SQLException, RuntimeException { + if("".equals(mngrPowerVO.getPowerName())) CommUtil.doComplete(model, "오류", "관리자 권한 명을 입력 해 주세요", "history.back()"); + else if("".equals(mngrPowerVO.getPowerCode())) CommUtil.doComplete(model, "오류", "관리자 권한 코드를 입력 해 주세요", "history.back()"); + else if("".equals(mngrAuthorityVO.getMenuCodes())) CommUtil.doComplete(model, "오류", "메뉴를 선택 해 주세요", "history.back()"); + mngrPowerVO.setRegmemid(CommUtil.getMngrMemId()); + mngrAuthorityService.insertMngrAuthorityPowerRegistProc(mngrPowerVO, mngrAuthorityVO.getMenuCodes()); + return CommUtil.doComplete(model, "완료", "등록이 완료 되었습니다.", "location.href='mngrAuthorityPowerMain.do';"); + } + + + /** + * 관리자 권한 수정 + * @param mngrAuthoritySearchVO + * @param model + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityPowerViewAjax.do") + public void mngrAuthorityPowerViewAjax(MngrAuthorityVO mngrAuthorityVO, ModelMap model, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + /** + * 관리자 메뉴권한은 t_power의 power_idx 와 조인되어 사용되는 권한(auth_type = 1) 만 사용하며, + * t_manager의 mng_id 와 조인되어 사용되는 권한(auth_type = 0)은 사용하지 않는다. + * + */ + String result = "0"; + MngrPowerVO mngrPowerVO = mngrAuthorityService.selectMngrPowerView(mngrAuthorityVO); + List authList = mngrAuthorityService.selectMngrAuthorityPowerViewAjax(mngrAuthorityVO); + String json = "[{"; + + if(mngrPowerVO == null && !"0".equals(mngrAuthorityVO.getAuthType())) result = "3"; // 관리자 권한 정보가 없습니다. + else if(mngrPowerVO != null){ + json+= "\"powerIdx\":\""+mngrPowerVO.getPowerIdx()+"\","; + json+= "\"powerName\":\""+mngrPowerVO.getPowerName()+"\","; + json+= "\"powerCode\":\""+mngrPowerVO.getPowerCode()+"\","; + } + if(authList.size() == 0) result = "4"; // 메뉴 권한 정보가 없습니다. + else { + json+= "\"authorityList\":\""; + for(int i = 0; i < authList.size(); i++){ + MngrAuthorityVO tmpMngrAuthorityVO = (MngrAuthorityVO)authList.get(i); + json += tmpMngrAuthorityVO.getMenuCode(); + if(i < authList.size() - 1){ + json += "|"; + } + } + json += "\","; + result = "1"; + } + json+= "\"result\":\""+result+"\""; + json += "}]"; + CommUtil.printWriter(json, response); + } + + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityPowerUpdateProc.do") + public String mngrAuthorityPowerUpdateProc(MngrAuthorityVO mngrAuthorityVO, MngrPowerVO mngrPowerVO,ModelMap model) throws IOException, SQLException, RuntimeException { + if("".equals(mngrPowerVO.getPowerIdx())) CommUtil.doComplete(model, "오류", "관리자 권한 인덱스 정보가 없습니다.", "history.back()"); + else if("".equals(mngrPowerVO.getPowerName())) CommUtil.doComplete(model, "오류", "관리자 권한 명을 입력 해 주세요", "history.back()"); + else if("".equals(mngrPowerVO.getPowerCode())) CommUtil.doComplete(model, "오류", "관리자 권한 코드를 입력 해 주세요", "history.back()"); + else if("".equals(mngrAuthorityVO.getMenuCodes())) CommUtil.doComplete(model, "오류", "메뉴를 선택 해 주세요", "history.back()"); + mngrPowerVO.setUpdmemid(CommUtil.getMngrMemId()); + mngrAuthorityService.updateMngrAuthorityPowerUpdateProc(mngrPowerVO, mngrAuthorityVO.getMenuCodes()); + return CommUtil.doComplete(model, "완료", "수정이 완료 되었습니다.", "location.href='mngrAuthorityPowerMain.do';"); + } + + + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityPowerDeleteProc.do") + public String mngrAuthorityPowerDeleteProc(MngrAuthorityVO mngrAuthorityVO, MngrPowerVO mngrPowerVO,ModelMap model) throws IOException, SQLException, RuntimeException { + if("".equals(mngrPowerVO.getPowerIdx())) CommUtil.doComplete(model, "오류", "관리자 권한을 선택해 주세요.", "history.back()"); + mngrPowerVO.setDelmemid(CommUtil.getMngrMemId()); + mngrAuthorityService.deleteMngrAuthorityPowerDeleteProc(mngrPowerVO, mngrAuthorityVO); + return CommUtil.doComplete(model, "완료", "삭제가 완료 되었습니다.", "location.href='mngrAuthorityPowerMain.do';"); + } + + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityPowerUpdateManagerAuth.do") + public void mngrAuthorityPowerUpdateManagerAuth(MngrPowerVO mngrPowerVO, ModelMap model, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String result = "0"; + if("".equals(mngrPowerVO.getPowerCode())) result = "2"; // 권한 롤 정보가 없습니다. + else if(mngrPowerVO.getChkId() == null || mngrPowerVO.getChkId().length == 0) result = "3"; // 권한을 적용 할 관리자를 선택 해 주세요. + + mngrAuthorityService.updateMngrAuthorityPowerUpdateManagerAuth(mngrPowerVO); + result = "1"; + CommUtil.printWriter("{\"result\":\""+result+"\"}", response); + } + + /** + * 등록 페이지의 저장 처리 + * @param mngrAuthoritySearchVO + * @param model + * @param authorityVO + * @param request + * @return + * @throws IOException, SQLException, RuntimeException + *//* + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityRegistProc.do") + public String mngrAuthorityRegistProc(@ModelAttribute("searchVO") MngrAuthoritySearchVO mngrAuthoritySearchVO, ModelMap model, MngrAuthorityVO authorityVO, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + //입력 값 유효 체크 + // 게시판 아이디, 이름,스킨, 목록갯수,목록권한,뷰조회권한,등록권한,답변권한,기본페이지 + if("".equals( CommUtil.isNull( authorityVO.getBcId() , "") )) return CommUtil.doComplete(model, "오류", "게시판 아이디를 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcName() , "") )) return CommUtil.doComplete(model, "오류", "게시판 이름을 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcSkin() , "") )) return CommUtil.doComplete(model, "오류", "게시판 스킨을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcViewcount() , "") )) return CommUtil.doComplete(model, "오류", "목록 갯수를 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcList() , "") )) return CommUtil.doComplete(model, "오류", "목록권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcView() , "") )) return CommUtil.doComplete(model, "오류", "뷰 조회권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcRegist() , "") )) return CommUtil.doComplete(model, "오류", "등록권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcReply() , "") )) return CommUtil.doComplete(model, "오류", "답변권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcReplyyn() , "") )) return CommUtil.doComplete(model, "오류", "답변사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcFileyn() , "") )) return CommUtil.doComplete(model, "오류", "첨부파일사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcSecretyn() , "") )) return CommUtil.doComplete(model, "오류", "비밀글사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcNoticeyn() , "") )) return CommUtil.doComplete(model, "오류", "공지글사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcGroupyn() , "") )) return CommUtil.doComplete(model, "오류", "카테고리사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcEditoryn() , "") )) return CommUtil.doComplete(model, "오류", "에디터사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcPrevnextyn() , "") )) return CommUtil.doComplete(model, "오류", "이전/다음글사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcDefaultpage() , "") )) return CommUtil.doComplete(model, "오류", "기본페이지를 입력 해 주세요.", "history.back();"); + + if("Y".equals(authorityVO.getBcFileyn())){ + if("".equals( CommUtil.isNull( authorityVO.getBcFilecount() , "") )) return CommUtil.doComplete(model, "오류", "첨부파일 갯수를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcFilesize() , "") )) return CommUtil.doComplete(model, "오류", "첨부파일 용량제한을 선택 해 주세요.", "history.back();"); + } + if("".equals( CommUtil.isNull( authorityVO.getBcFilecount() , "") )) {authorityVO.setBcFilecount("0");} + if("".equals( CommUtil.isNull( authorityVO.getBcFilesize() , "") )) {authorityVO.setBcFilesize("0");} + + //게시판 아이디 첫글자 영문 체크 + if(!CommUtil.regEx("^[a-zA-Z]", authorityVO.getBcId())) return CommUtil.doComplete(model, "오류", "게시판 아이디 첫글자는 영문자로 입력 해 주세요.", "history.back();"); + if(CommUtil.regEx("[^a-zA-Z0-9_]", authorityVO.getBcId())) return CommUtil.doComplete(model, "오류", "게시판 아이디는 영문, 숫자, _ 만 입력 가능합니다.", "history.back();"); + + //게시판 아이디 중복 검사 + mngrAuthoritySearchVO.setId(authorityVO.getBcId()); + int resultCount = mngrAuthorityService.mngrAuthorityCheckId(mngrAuthoritySearchVO); + if(resultCount > 0) return CommUtil.doComplete(model, "오류", "중복된 게시판 아이디 입니다. 확인 후 다시 시도하세요." , "history.back();"); + + //게시판 카테고리에 코드를 만들어 놓는다. 사용여부와 상관없이 만들어 놓음. + MngrCodeVO mngrCodeVO = new MngrCodeVO(); + mngrCodeVO.setSchCode("board");//설치시 게시판카테고리용 코드관리가 등록돼있음 + mngrCodeVO.setCcode("_" + authorityVO.getBcId());//게시판 카테고리 코드는 앞에 _를 붙인다. + mngrCodeVO.setCname(authorityVO.getBcName()); + mngrCodeVO.setRegmemid(""); + mngrCodeService.insertCode(mngrCodeVO); + + authorityVO.setRegmemid(""); + mngrAuthorityService.mngrAuthorityRegistProc(authorityVO); + + return CommUtil.doComplete(model, "완료", "등록 되었습니다.", "location.href='mngrAuthorityList.do?"+mngrAuthoritySearchVO.getQuery()+"'"); + } + + *//** + * 수정페이지 저장 처리 + * @param mngrAuthoritySearchVO + * @param model + * @param authorityVO + * @return + * @throws IOException, SQLException, RuntimeException + *//* + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityUpdateProc.do") + public String mngrAuthorityUpdateProc(@ModelAttribute("searchVO") MngrAuthoritySearchVO mngrAuthoritySearchVO, ModelMap model, MngrAuthorityVO authorityVO) throws IOException, SQLException, RuntimeException { + //입력 값 유효 체크 + // 게시판 아이디, 이름,스킨, 목록갯수,목록권한,뷰조회권한,등록권한,답변권한,기본페이지 + if("".equals( CommUtil.isNull( authorityVO.getBcName() , "") )) return CommUtil.doComplete(model, "오류", "게시판 이름을 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcSkin() , "") )) return CommUtil.doComplete(model, "오류", "게시판 스킨을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcViewcount() , "") )) return CommUtil.doComplete(model, "오류", "목록 갯수를 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcList() , "") )) return CommUtil.doComplete(model, "오류", "목록권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcView() , "") )) return CommUtil.doComplete(model, "오류", "뷰 조회권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcRegist() , "") )) return CommUtil.doComplete(model, "오류", "등록권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcReply() , "") )) return CommUtil.doComplete(model, "오류", "답변권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcReplyyn() , "") )) return CommUtil.doComplete(model, "오류", "답변사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcFileyn() , "") )) return CommUtil.doComplete(model, "오류", "첨부파일사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcSecretyn() , "") )) return CommUtil.doComplete(model, "오류", "비밀글사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcNoticeyn() , "") )) return CommUtil.doComplete(model, "오류", "공지글사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcGroupyn() , "") )) return CommUtil.doComplete(model, "오류", "카테고리사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcEditoryn() , "") )) return CommUtil.doComplete(model, "오류", "에디터사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcPrevnextyn() , "") )) return CommUtil.doComplete(model, "오류", "이전/다음글사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcDefaultpage() , "") )) return CommUtil.doComplete(model, "오류", "기본페이지를 입력 해 주세요.", "history.back();"); + + if("Y".equals(authorityVO.getBcFileyn())){ + if("".equals( CommUtil.isNull( authorityVO.getBcFilecount() , "") )) return CommUtil.doComplete(model, "오류", "첨부파일 갯수를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( authorityVO.getBcFilesize() , "") )) return CommUtil.doComplete(model, "오류", "첨부파일 용량제한을 선택 해 주세요.", "history.back();"); + } + if("".equals( CommUtil.isNull( authorityVO.getBcFilecount() , "") )) {authorityVO.setBcFilecount("0");} + if("".equals( CommUtil.isNull( authorityVO.getBcFilesize() , "") )) {authorityVO.setBcFilesize("0");} + + mngrAuthorityService.mngrAuthorityUpdateProc(authorityVO); *//** impl에서 코드관리의 게시판명도 수정되도록 처리 *//* + + return CommUtil.doComplete(model, "완료", "수정 되었습니다.", "location.href='mngrAuthorityView.do?"+mngrAuthoritySearchVO.getQuery()+"'"); + } + + *//** + * 삭제 처리 페이지 + * @param mngrAuthoritySearchVO + * @param model + * @param authorityVO + * @return + * @throws IOException, SQLException, RuntimeException + *//* + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityDelProc.do") + public String mngrAuthorityDelProc(@ModelAttribute("searchVO") MngrAuthoritySearchVO mngrAuthoritySearchVO, ModelMap model, MngrAuthorityVO authorityVO) throws IOException, SQLException, RuntimeException { + authorityVO.setDelmemid(""); + mngrAuthorityService.mngrAuthorityDelProc(authorityVO); + return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='mngrAuthorityList.do?"+mngrAuthoritySearchVO.getQuery()+"'"); + + } + *//** + * 삭제 처리 페이지 : 다중삭제(목록페이지에서 다중선택 후 삭제) + * @param mngrAuthoritySearchVO + * @param model + * @param authorityVO + * @param request + * @return + * @throws IOException, SQLException, RuntimeException + *//* + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityChkDelProc.do") + public String mngrAuthorityChkDelProc(@ModelAttribute("searchVO") MngrAuthoritySearchVO mngrAuthoritySearchVO, ModelMap model, MngrAuthorityVO authorityVO, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + authorityVO.setDelmemid(""); + mngrAuthorityService.mngrAuthorityChkDelProc(authorityVO); + return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='mngrAuthorityList.do?"+mngrAuthoritySearchVO.getQuery()+"'"); + } + + *//** + * 게시판 목록(Ajax) + * @param mngrAuthoritySearchVO + * @param response + * @throws IOException, SQLException, RuntimeException + *//* + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityListAjax.ajax") + public void mngrAuthorityListAjax(@ModelAttribute("searchVO") MngrAuthoritySearchVO mngrAuthoritySearchVO, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + + mngrAuthoritySearchVO.setPageUnit(10);//viewCount + mngrAuthoritySearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrAuthoritySearchVO.getPage()); + //** paging setting *//* + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrAuthoritySearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrAuthoritySearchVO.getPageSize()); + + mngrAuthoritySearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrAuthoritySearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrAuthoritySearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List result = mngrAuthorityService.mngrAuthorityList(mngrAuthoritySearchVO); + int totCnt = mngrAuthorityService.mngrAuthorityListTotCnt(mngrAuthoritySearchVO); + paginationInfo.setTotalRecordCount(totCnt); + + String json = "{\"total\":\""+paginationInfo.getTotalRecordCount()+"\",\"currentPage\":\""+paginationInfo.getCurrentPageNo()+"\", \"totalPage\":\""+paginationInfo.getTotalPageCount()+"\",\"result\": ["; + for(int i = 0; i < result.size(); i++){ + MngrAuthorityVO authority = (MngrAuthorityVO)result.get(i); + json += String.format("{\"bcId\":\"%s\",\"bcName\":\"%s\",\"bcSkin\":\"%s\"}", authority.getBcId(), authority.getBcName(), authority.getBcSkin()); + if(i < result.size() - 1){ + json += ","; + } + + } + json += "]}"; + CommUtil.printWriter(json, response); + } + + *//** + * 카테고리 등록(코드 등록 서비스를 사용하지만, 코드를 자동 생성 한다) + * @param mngrCodeVO + * @param response + * @throws IOException, SQLException, RuntimeException + *//* + @RequestMapping(value = "/_mngr_/authority/mngrAuthorityCategoryRegist.ajax") + public void mngrAuthorityCategoryRegist(MngrCodeVO mngrCodeVO, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String result = "0"; + if("".equals( CommUtil.isNull( mngrCodeVO.getSchCode() , "") )){ // 게시판코드 free + result = "2"; + }else if("".equals( CommUtil.isNull( mngrCodeVO.getCpcode() , "") )) { //부모코드 _free + result = "3"; + }else if("".equals( CommUtil.isNull( mngrCodeVO.getCname() , "") )) { //코드명 구분 + result = "4"; + }else{ + String newCode = mngrCodeVO.getCpcode(); + MngrCodeVO tmpCodeVO = mngrCodeService.mngrCodeMaxCode(mngrCodeVO); + if(tmpCodeVO == null || tmpCodeVO.getCcode() == null){ + newCode = newCode + "01"; + }else{ + String tmpCode = tmpCodeVO.getCcode().replaceAll(newCode, ""); + CommUtil.p( + tmpCodeVO.getCcode().replaceAll(mngrCodeVO.getCpcode(), "") + , tmpCodeVO.getCcode().replaceAll(mngrCodeVO.getCpcode(), "") + ); + newCode = mngrCodeVO.getCpcode() + CommUtil.getZeroPlus(Integer.valueOf(tmpCode) + 1); + } + mngrCodeVO.setCcode(newCode); + mngrCodeVO.setSchCode(mngrCodeVO.getCpcode()); // 저장시에 부모코드는 schCode값을 저장한다. + mngrCodeService.insertCode(mngrCodeVO); + + result = "1"; + } + + + CommUtil.printWriter("{\"result\":\""+result+"\"}", response); + } +*/ + +} diff --git a/src/main/java/egovframework/itgcms/mngr/board/web/BoardController.java b/src/main/java/egovframework/itgcms/mngr/board/web/BoardController.java new file mode 100644 index 0000000..fc15882 --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/board/web/BoardController.java @@ -0,0 +1,717 @@ +package egovframework.itgcms.mngr.board.web; + + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +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.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.com.ext.jfile.service.JFileDetails; +import egovframework.com.ext.jfile.service.JFileService; +import egovframework.com.ext.jfile.service.impl.JFileVO; +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.core.board.service.BoardAuthVO; +import egovframework.itgcms.core.board.service.BoardSearchVO; +import egovframework.itgcms.core.board.service.BoardService; +import egovframework.itgcms.core.board.service.BoardVO; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigService; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigVO; +import egovframework.itgcms.core.code.service.MngrCodeService; +import egovframework.itgcms.core.manager.service.MngrManagerService; +import egovframework.itgcms.core.manager.service.MngrManagerVO; +//import egovframework.itgcms.core.social.service.SocialMediaService; +//import egovframework.itgcms.module.push.client.PushResult; +//import egovframework.itgcms.module.push.client.PushSend; +//import egovframework.itgcms.module.push.service.PushSender; +//import egovframework.itgcms.module.push.service.PushService; +//import egovframework.itgcms.module.push.service.impl.PushResultMapper; +//import egovframework.itgcms.module.pushservice.service.PushServiceService; +//import egovframework.itgcms.module.pushservice.service.PushServiceVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; + + +/** + * @파일명 : BoardController.java + * @파일정보 : 게시판 컨텐츠 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class BoardController { + + + /** BoardService */ + @Resource(name = "boardService") + private BoardService boardService; + + /** BoardconfigService */ + @Resource(name = "mngrBoardconfigService") + private MngrBoardconfigService mngrBoardconfigService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** mngrCodeService */ + @Resource(name = "mngrCodeService") + private MngrCodeService mngrCodeService; + + /** mngrCodeService */ + @Resource(name = "mngrManagerService") + private MngrManagerService mngrManagerService; + + /** socialMediaService */ +// @Resource(name="socialMediaService") +// private SocialMediaService socialMediaService; + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + +// /** PushService */ +// @Resource(name = "pushService") +// private PushService pushService; +// +// /** PushServiceService */ +// @Resource(name="pushServiceService") +// private PushServiceService pushServiceService; +// +// /** PushResultMapper */ +// @Resource(name="pushResultMapper") +// private PushResultMapper pushResultMapper; + + @Autowired + private JFileService jfileService; + + +// private static final Logger LOGGER = LogManager.getLogger(BoardController.class); + + + @RequestMapping(value = "/{root}/board/{bcid}.do") + public String board(@PathVariable String root, + @PathVariable String bcid, + @ModelAttribute("boardSearchVO") BoardSearchVO boardSearchVO, + @ModelAttribute("boardVO") BoardVO boardVO, + ModelMap model, + HttpServletRequest request, + HttpServletResponse response + ) throws IOException, SQLException, RuntimeException, NoSuchAlgorithmException { + + ItgMap licenseVO = CommUtil.getSystemLicenseVO(request, "license"); + String lId = CommUtil.seedDec256(CommUtil.isNull(licenseVO.getValue(0),"")); + String siteCode = CommUtil.isNull(request.getParameter("siteCode"),""); + boolean isMobile = CommUtil.isMobile(request); + String loginPageUrl = "/"+siteCode+"/contents/"+siteCode+"Login.do"; //TODO 로그인페이지 수정 + + /* + String site = CommUtil.isNull(CommUtil.getSiteFile(), "web"); + site = site.replaceAll("\\n", ""); + site = "(" + site + "|_mngr_)";//관리자 추가 + */ + if(!CommUtil.regEx("(user|_mngr_)", root)) return CommUtil.doComplete(model, "오류", "정상적인 경로로 접속 해 주세요", "history.back();"); + if ("_mngr_".equals(root)) { + model.addAttribute("menuCode", request.getParameter("menuCode")); + } + + model.addAttribute("siteCode", siteCode); + model.addAttribute("isMobile", isMobile); + model.addAttribute("bcid", bcid); + boardSearchVO.setSiteCode(siteCode); + + //model.set + /* + * ######################################################################## + * 게시판 환경설정 조회 + * ######################################################################## + */ + MngrBoardconfigVO mngrBoardconfigVO = new MngrBoardconfigVO(); + mngrBoardconfigVO.setId(bcid); + mngrBoardconfigVO = mngrBoardconfigService.mngrBoardconfigView(mngrBoardconfigVO); + if(mngrBoardconfigVO == null){ + return CommUtil.doComplete(model, "오류", "게시판 정보가 없습니다. 다시 시도하세요.", "history.back(); "); + } + String uId = boardSearchVO.getUid(); //urlID + + if(!"".equals(uId)){ + String[] uIds = uId.split("_"); + if("view".equals(uIds[0])){ + boardSearchVO.setSchM(uIds[0]); + if("view".equals(uIds[0])&&CommUtil.isNumeric(uIds[1])){ + boardSearchVO.setId(uIds[1]); + }else{ + return CommUtil.doComplete(model, "오류", "정상적인 게시글이 아닙니다. 다시 시도하세요.", "history.back();"); + } + }else{ + return CommUtil.doComplete(model, "오류", "정상적인 접근이 아닙니다. 다시 시도하세요.", "history.back();"); + } + } + + String userId = ""; + String groupCode = ""; + String mngType = ""; + String mngAuth = ""; + String boardId =""; //게시글 아이디 + String regMemId = ""; //게시글 등록자 아이디 + String ownId = ""; //게시글 연관 아이디(답변글 조회 권한을 위한 추가) + String powers =""; + + + + if("user".equals(root)){ + userId = (CommUtil.getUserSessionVO() == null)? "" : CommUtil.getUserSessionVO().getId(); + }else{ + userId = (CommUtil.getMngrSessionVO() == null)? "" : CommUtil.getMngrSessionVO().getId(); + groupCode = (CommUtil.getMngrSessionVO() == null)? "" : CommUtil.getMngrSessionVO().getGroup(); + mngType = (CommUtil.getMngrSessionVO() == null)? "" : CommUtil.getMngrSessionVO().getType(); + mngAuth = (CommUtil.getMngrSessionVO() == null)? "" : CommUtil.getMngrSessionVO().getMngAuth(); + MngrManagerVO mngrManagerVO = new MngrManagerVO(); + mngrManagerVO.setMngType(mngType); + powers = mngrManagerService.mngrManagerCheckPower(mngrManagerVO); + } + + boardSearchVO.setSchM(CommUtil.isNull(boardSearchVO.getSchM(), mngrBoardconfigVO.getBcDefaultpage())); + boardSearchVO.setSchBcid(bcid); // 게시판 아이디 + + boardId = CommUtil.isNull(boardSearchVO.getId(), ""); + if(!"".equals(boardId)){ + BoardVO BoardRegInfo= boardService.selectBoardRegInfo(boardSearchVO); + if(BoardRegInfo == null){ + return CommUtil.doComplete(model, "오류", "데이터가 없습니다. 이미 삭제되었거나 잘못된 접속경로입니다.", "history.back()"); + } + regMemId = BoardRegInfo.getRegmemid(); + ownId = BoardRegInfo.getOwnId(); + } + + /* 검색조건 값 설정 */ + + boardSearchVO.setRoot(root); // 사용영역(사용자, 관리자 : web, _mngr_) + boardSearchVO.setMngrBoardconfigVO(mngrBoardconfigVO); + boardSearchVO.setSchRegmemid(userId); + boardSearchVO.setSchGroupCode(groupCode); + boardSearchVO.setSchMngType(mngType); + + boardVO.setSchBcid(bcid);//게시판아이디 + boardVO.setRoot(root); // 사용영역(사용자, 관리자 : web, _mngr_) + boardVO.setMngrBoardconfigVO(mngrBoardconfigVO); + boardVO.setSchRegmemid(userId); + boardVO.setSchGroupCode(groupCode); + boardVO.setSchMngType(mngType); + + /* ####################################################################### + * 게시판 접근 제어 MngrBoardController.java > getUserAuthList 메소드에서 권한 확인 + * 사용자:비회원 100 + * 사용자:회원 200 + * 사용자:작성자 210 + * 사용자:권한없음 900 + * + * 관리자:전체 200 + * 관리자:부서 300 + * 관리자:작성자 310 + * 관리자:관리자 900 + ####################################################################### */ + BoardAuthVO boardAuthVO = new BoardAuthVO(); + // 사용자 영역 접근 + if("user".equals(root)){ + //schM : regist, view, proc(act:REGIST, UPDATE) deleteProc , chkDelProc, else + if("regist".equals( boardSearchVO.getSchM() )){ //글쓰기 회원 비회원 여부 확인 + + } else if("regist".equals( boardSearchVO.getSchM() )){ + } else if("view".equals( boardSearchVO.getSchM() )){ + if("faq".equals(mngrBoardconfigVO.getBcSkin())){ + boardSearchVO.setSchM("list"); + } + } else if("proc".equals( boardSearchVO.getSchM() )){ + if("REGIST".equals(boardSearchVO.getAct())){ + + }else if("UPDATE".equals(boardSearchVO.getAct())){ + + }else if("REPLY".equals(boardSearchVO.getAct())){ + + } + } else if("deleteProc".equals( boardSearchVO.getSchM() )){ + } else if("chkDelProc".equals( boardSearchVO.getSchM() )){ + } else { //목록, 비회원:비로그인, 회원,작성자:로그인 + + } + + //목록 권한 설정 + if("100".equals(mngrBoardconfigVO.getBcList())){ + boardAuthVO.setList(true); + }else if(mngrBoardconfigVO.getBcList().startsWith("2") && CommUtil.isUserLogin()){ //2로 시작 + boardAuthVO.setList(true); + } + //조회 권한 설정 + if("100".equals(mngrBoardconfigVO.getBcView())){ + boardAuthVO.setView(true); + }else if("200".equals(mngrBoardconfigVO.getBcView()) && CommUtil.isUserLogin()){ //2로 시작 + boardAuthVO.setView(true); + }else if("210".equals(mngrBoardconfigVO.getBcView()) && userId.equals(ownId)){ //2로 시작 + boardAuthVO.setView(true); + } + //글쓰기 권한 설정 + if("100".equals(mngrBoardconfigVO.getBcRegist())){ + boardAuthVO.setRegist(true); + }else if(mngrBoardconfigVO.getBcRegist().startsWith("2") && CommUtil.isUserLogin()){ //2로 시작 + boardAuthVO.setRegist(true); + } + //수정 권한 설정 + if("100".equals(mngrBoardconfigVO.getBcUpdate())){ + boardAuthVO.setUpdate(true); + }else if(mngrBoardconfigVO.getBcUpdate().startsWith("2") && CommUtil.isUserLogin()){ //2로 시작 + boardAuthVO.setUpdate(true); + } + //답변 권한 설정 + if("Y".equals(mngrBoardconfigVO.getBcReplyyn())){ + if("100".equals(mngrBoardconfigVO.getBcReply())){ + boardAuthVO.setReply(true); + }else if(mngrBoardconfigVO.getBcReply().startsWith("2") && CommUtil.isUserLogin()){ //2로 시작 + boardAuthVO.setReply(true); + } + } + }else{ // 관리자 영역 접근 + + //목록 권한 설정 + if("200".equals(mngrBoardconfigVO.getBcMngrList())||mngrBoardconfigVO.getBcMngrList().startsWith("3")){ //전체, 부서, 작성자일경우 + boardAuthVO.setList(true); + /*}else if("900".equals(mngrBoardconfigVO.getBcMngrList()) && (CommUtil.strInArrChk(CommUtil.getMngrSessionVO().getPower(), "menu04"))){ //통합관리자이상 +*/ }else if("900".equals(mngrBoardconfigVO.getBcMngrList()) && mngAuth.startsWith("9") ){ //통합관리자이상 + boardAuthVO.setList(true); + }else if("99".equals(mngAuth)){ + boardAuthVO.setList(true); + } + + //조회 권한 설정 + if("200".equals(mngrBoardconfigVO.getBcMngrView())){ //전체일경우 + boardAuthVO.setView(true); + }else if("300".equals(mngrBoardconfigVO.getBcMngrView()) && groupCode.equals(mngrBoardconfigVO.getGroupCode()) ){ //부서일 경우 + boardAuthVO.setView(true); + }else if("310".equals(mngrBoardconfigVO.getBcMngrView()) && userId.equals(ownId)){ //작성자일 경우 + boardAuthVO.setView(true); + }else if("900".equals(mngrBoardconfigVO.getBcMngrView()) && mngAuth.startsWith("9")){ //통합관리자이상 + boardAuthVO.setView(true); + }else if("99".equals(mngAuth)){ + boardAuthVO.setView(true); + } + //글쓰기 권한 설정 + if("200".equals(mngrBoardconfigVO.getBcMngrRegist())||mngrBoardconfigVO.getBcMngrRegist().startsWith("3")){ //전체, 부서, 작성자일경우 + boardAuthVO.setRegist(true); + }else if("900".equals(mngrBoardconfigVO.getBcMngrRegist()) && mngAuth.startsWith("9")){ //통합관리자이상 + boardAuthVO.setRegist(true); + }else if("99".equals(mngAuth)){ + boardAuthVO.setRegist(true); + } + //수정 권한 설정 + if("200".equals(mngrBoardconfigVO.getBcMngrUpdate())){ //전체일경우 + boardAuthVO.setUpdate(true); + }else if("300".equals(mngrBoardconfigVO.getBcMngrUpdate()) && groupCode.equals(mngrBoardconfigVO.getGroupCode()) ){ //부서일 경우 + boardAuthVO.setUpdate(true); + }else if("310".equals(mngrBoardconfigVO.getBcMngrUpdate()) && userId.equals(regMemId)){ //작성자일 경우 + boardAuthVO.setUpdate(true); + }else if("900".equals(mngrBoardconfigVO.getBcMngrUpdate()) && mngAuth.startsWith("9")){ //통합관리자이상 + boardAuthVO.setUpdate(true); + }else if("99".equals(mngAuth)){ + boardAuthVO.setUpdate(true); + } + //답변 권한 설정 + if("Y".equals(mngrBoardconfigVO.getBcReplyyn())){ + if("200".equals(mngrBoardconfigVO.getBcMngrReply())||mngrBoardconfigVO.getBcMngrReply().startsWith("3")){ //전체, 부서, 작성자일경우 + boardAuthVO.setReply(true); + }else if("900".equals(mngrBoardconfigVO.getBcMngrReply()) && mngAuth.startsWith("9")){ //통합관리자이상 + boardAuthVO.setReply(true); + }else if("99".equals(mngAuth)){ + boardAuthVO.setReply(true); + } + } + + if(lId.equals(userId)){ + boardAuthVO.setList(true); + boardAuthVO.setView(true); + boardAuthVO.setRegist(true); + boardAuthVO.setUpdate(true); + boardAuthVO.setReply(true); + } + } + + model.addAttribute("boardAuthVO", boardAuthVO); + + String returnPage = ""; + + if("faq".equals(mngrBoardconfigVO.getBcSkin()) && "view".equals(boardSearchVO.getSchM())){ + if ("user".equals(root)) { + boardSearchVO.setSchM("list"); + } + } + + /* ######################################################################## + * 처리구분 분기(목록, 등록, 조회, 수정, 삭제) + * ######################################################################## */ + if("regist".equals(boardSearchVO.getSchM())){ + returnPage = getReturnPage(mngrBoardconfigVO, boardSearchVO, "user".equals(root)?"regist":"view"); //등록페이지, 관리자는 view를 공통으로 사용함 + + /* ######################################################################## + * 게시판 등록 폼 + * ######################################################################## */ + + // 등록페이지 권한 + if("user".equals(root) && !boardAuthVO.isRegist()){ + return CommUtil.doCompleteConfirm(model, "오류", "로그인이 필요한 서비스입니다. \\n로그인 페이지로 이동하시겠습니까?", "location.href='"+loginPageUrl+"'", "history.back();"); + } + // 등록페이지 권한 (관리자) + if("_mngr_".equals(root) && !boardAuthVO.isRegist()){ + return CommUtil.doComplete(model, "오류", "등록 권한이 없습니다. 최고관리자에게 문의해주세요", "history.back();"); + } + +// socialMediaService.getSocialMediaUsingKeys(model); + + // 등록페이지 이동 + return boardService.selectBoardRegist(model, mngrBoardconfigVO, boardSearchVO, boardVO, request, response, returnPage); //"itgcms/global/board/board"; + + }else if("view".equals(boardSearchVO.getSchM()) // 관리자는 조회, 수정 동일 페이지 + ){ + returnPage = getReturnPage(mngrBoardconfigVO, boardSearchVO, "view"); + + /* ######################################################################## + * 게시판 조회(수정) + * ######################################################################## */ + + //조회페이지 권한 + if("user".equals(root) && !boardAuthVO.isView() && !CommUtil.isUserLogin()){ + return CommUtil.doCompleteConfirm(model, "오류", "로그인이 필요한 서비스입니다. \\n로그인 페이지로 이동하시겠습니까?", "location.href='"+loginPageUrl+"'", "history.back();"); + }else if("user".equals(root) && !boardAuthVO.isView() && CommUtil.isUserLogin()){ + return CommUtil.doComplete(model, "오류", "글 열람 권한이 없습니다. 관리자에게 문의해주세요", "history.back();"); + } + + // 조회페이지 권한 (관리자) + if("_mngr_".equals(root) && !boardAuthVO.isView()){ + return CommUtil.doComplete(model, "오류", "조회 권한이 없습니다. 최고관리자에게 문의해주세요", "history.back();"); + } + + // 게시글 정보 조회 + String strReturnValue = boardService.selectBoardView(model, mngrBoardconfigVO, boardSearchVO, boardVO, request, response, returnPage); //"itgcms/global/board/board"; + + /* ######################################################################## + * 조회수 증가 + * ######################################################################## */ + boardService.updateIncreaseReadnum(boardSearchVO); + + + BoardVO fileBoardVO = (BoardVO)model.get("boardVO"); + String fileId = CommUtil.isNull(fileBoardVO.getFileId(), ""); + if(!"".equals(fileId)) { + List fileList = new ArrayList<>(); + List tempList= jfileService.getAttachFiles(fileId); + for (JFileDetails fileVO : tempList) { + if (fileVO instanceof JFileVO) { + if("N".equals(CommUtil.isNull(((JFileVO)fileVO).getDeleteYn(), ""))) { + + } + } + } + model.put("fileList", jfileService.getAttachFiles(fileId)); + } + + + // 조회페이지 이동 + return strReturnValue; + + }else if("reply".equals(boardSearchVO.getSchM()) + ){ + returnPage = getReturnPage(mngrBoardconfigVO, boardSearchVO, "user".equals(root)?"regist":"view"); //등록페이지, 관리자는 view를 공통으로 사용함 + + /* ######################################################################## + * 게시판 답변 폼 + * ######################################R################################## */ + + // 답변 권한 + if("user".equals(root) && !boardAuthVO.isReply()){ + return CommUtil.doCompleteConfirm(model, "오류", "로그인이 필요한 서비스입니다. \\n로그인 페이지로 이동하시겠습니까?", "location.href='"+loginPageUrl+"'", "history.back();"); + } + + // 답변페이지 권한 (관리자) + if("_mngr_".equals(root) && !boardAuthVO.isReply()){ + return CommUtil.doComplete(model, "오류", "답변 권한이 없습니다. 최고관리자에게 문의해주세요", "history.back();"); + } + + // 답변페이지 이동 + return boardService.selectBoardReply(model, mngrBoardconfigVO, boardSearchVO, boardVO, request, response, returnPage); //"itgcms/global/board/board"; + + }else if("update".equals(boardSearchVO.getSchM()) // 관리자는 조회, 수정 동일 페이지 + ){ + returnPage = getReturnPage(mngrBoardconfigVO, boardSearchVO, "regist"); + + /* ######################################################################## + * 게시판 조회(수정) + * ######################################################################## */ + + //수정페이지 권한 + if("user".equals(root) && !boardAuthVO.isUpdate()){ + return CommUtil.doCompleteConfirm(model, "오류", "로그인이 필요한 서비스입니다. \\n로그인 페이지로 이동하시겠습니까?", "location.href='"+loginPageUrl+"'", "history.back();"); + } else if ("user".equals(root) && boardAuthVO.isUpdate()) { + + // 로그인을 하였을 경우, 자기글이 아니면 수정모드로 진입자체가 안됨. + // 로그인을 하지 않았을 경우, 비회원 글이 아니면 수정모드로 진입자체가 안됨. + // 따라서 로그인을 하지 않았을 경우에 한하여 패스워드 검사를 하여 다음 프로세스 진행 함. + + if ("".equals(userId) && "".equals(boardVO.getSchSecritPw())) { + //로그인을 하지 않았고, 비밀번호 패스워드가 입력되지 않았을 경우 + model.addAttribute("searchVO", boardSearchVO); + return "itgcms/global/board/user_check_pass"; + } else if ("".equals(userId) && !"".equals(boardVO.getSchSecritPw())) { + //로그인을 하지 않았고, 비밀번호 패스워드가 입력된 경우 + if (!boardService.boardPassCheck(boardVO.getId(), CommUtil.hexSha256(boardVO.getSchSecritPw()))) { + return CommUtil.doComplete(model, "오류", "비밀번호가 일치하지 않습니다.", "history.back();"); + } + } + + } + + // 수정페이지 권한 (관리자) + if("_mngr_".equals(root) && !boardAuthVO.isUpdate()){ + return CommUtil.doComplete(model, "오류", "수정 권한이 없습니다. 최고관리자에게 문의해주세요", "history.back();"); + } + + // 수정페이지 이동 + return boardService.selectBoardView(model, mngrBoardconfigVO, boardSearchVO, boardVO, request, response, returnPage); //"itgcms/global/board/board"; + + }else if("proc".equals(boardSearchVO.getSchM())){ + if("REGIST".equals(boardSearchVO.getAct())){ + // 등록프로세스 권한 + if("user".equals(root) && !boardAuthVO.isRegist()){ + return CommUtil.doCompleteConfirm(model, "오류", "로그인이 필요한 서비스입니다. \\n로그인 페이지로 이동하시겠습니까?", "location.href='"+loginPageUrl+"'", "history.back();"); + } + + // 등록프로세스 권한 (관리자) + if("_mngr_".equals(root) && !boardAuthVO.isRegist()){ + return CommUtil.doComplete(model, "오류", "등록 권한이 없습니다. 최고관리자에게 문의해주세요", "history.back();"); + } + + String msg = boardService.insertBoardRegistProc(model, mngrBoardconfigVO, boardSearchVO, boardVO, request, response, returnPage); //"itgcms/global/board/board"; + if(!"".equals(msg)){ + return CommUtil.doComplete(model, "오류", msg, "history.back();"); + } + + /* ######################################################################## + * 게시판글 외부사이트 포스팅 + * ################################################################### ##### */ + // boardService.postingSocailMedia(boardVO, boardSearchVO, request); + + + /* ######################################################################## + * 게시판 등록 처리 + * ################################################################### ##### */ + String returnScript = ""; + if("user".equals(root)){ + returnScript = "location.href='?'"; + }else{ + returnScript = "location.href='/_mngr_/mngrContents/"+request.getParameter("menuUrl")+".do'"; + } + + + //푸쉬 발송 여부 체크 + if(boardVO.getBdPushyn().equals("Y")){ +// ===================================== 푸시 시작 ================================================================= + + if(boardSearchVO.getSchBcid().equals("notice") || boardVO.getSchBcid().equals("notice")){ + + //PushSenderVO gcmVo = new PushSenderVO(); + + + //List reslist = new ArrayList(); + + //reslist = pushService.selectGcmList(); + +// PushSender pushSender = new PushSender(); +// PushResult pushResult = new PushResult(); +// PushSend pushSend = new PushSend(); +// pushSend.setTitle("공지사항 등록"); +// pushSend.setMessage("신규 공지사항이 등록되었습니다. 제목 : "+boardVO.getBdTitle()); +// pushSend.setPushCategory("service5"); +// PushServiceVO mserviceVO = new PushServiceVO(); +// mserviceVO.setPushApplyYn("Y");// 푸시 수신 여부(동의) +// mserviceVO.setPush5("Y");// 푸시 수신 항목(공지사항) +// List pushServiceList = pushServiceService.getPushServiceListByBoard(mserviceVO); +// for(PushServiceVO pushService : pushServiceList) { +// pushSend.setVin(pushService.getVin()); +// pushResult = pushSender.sendPush(pushService.getRegId(), pushSend); +// pushResultMapper.insertPushResult(pushResult); +// } + + //gcmVo.setTitle(boardVO.getBdTitle()); + + HashMap hm = new HashMap(); + + //pushSender.sendPush(reslist, gcmVo); + } + +// ===================================== 푸시 끝================================================================= + } + + + + return CommUtil.doComplete(model, "완료", "등록이 완료 되었습니다.",returnScript); + + }else if("UPDATE".equals(boardSearchVO.getAct())){ // 관리자는 조회, 수정 동일 페이지 + // 수정프로세스 권한 + if("user".equals(root) && !boardAuthVO.isUpdate()){ + return CommUtil.doCompleteConfirm(model, "오류", "로그인이 필요한 서비스입니다. \\n로그인 페이지로 이동하시겠습니까?", "location.href='"+loginPageUrl+"'", "history.back();"); + } + + // 수정프로세스 권한 (관리자) + if("_mngr_".equals(root) && !boardAuthVO.isUpdate()){ + return CommUtil.doComplete(model, "오류", "수정 권한이 없습니다. 최고관리자에게 문의해주세요", "history.back();"); + } + + // 수정프로스세스 처리 + String msg = boardService.updateBoardUpdateProc(model, mngrBoardconfigVO, boardSearchVO, boardVO, request, response, returnPage); //"itgcms/global/board/board"; + if(!"".equals(msg)){ + return CommUtil.doComplete(model, "오류", msg, "history.back();"); + } + /* ######################################################################## + * 게시판 수정 처리 + * ######################################################################## */ + boardSearchVO.setSchM("view"); //수정페이지로 이동 + String returnScript = ""; + if("user".equals(root)){ + returnScript = "location.href='?"+boardSearchVO.getQuery()+"'"; + }else{ + returnScript = "location.href='/_mngr_/mngrContents/"+request.getParameter("menuUrl")+".do?"+boardSearchVO.getQuery()+"'"; + } + return CommUtil.doComplete(model, "완료", "등록이 완료 되었습니다.",returnScript); + }else if("REPLY".equals(boardSearchVO.getAct())){ // 관리자는 조회, 수정 동일 페이지 + // 답변프로세스 권한 + if("user".equals(root) && !boardAuthVO.isReply()){ + return CommUtil.doCompleteConfirm(model, "오류", "로그인이 필요한 서비스입니다. \\n로그인 페이지로 이동하시겠습니까?", "location.href='"+loginPageUrl+"'", "history.back();"); + } + // 답변프로세스 권한 (관리자) + if("_mngr_".equals(root) && !boardAuthVO.isReply()){ + return CommUtil.doComplete(model, "오류", "답변 권한이 없습니다. 최고관리자에게 문의해주세요", "history.back();"); + } + + // 답변프로스세스 처리 + String msg = boardService.insertBoardReplyProc(model, mngrBoardconfigVO, boardSearchVO, boardVO, request, response, returnPage); //"itgcms/global/board/board"; + if(!"".equals(msg)){ + return CommUtil.doComplete(model, "오류", msg, "history.back();"); + } + /* ######################################################################## + * 게시판 답변 처리 + * ######################################################################## */ + return CommUtil.doComplete(model, "완료", "답변이 완료 되었습니다.", "location.href='/_mngr_/mngrContents/"+request.getParameter("menuUrl")+".do'"); //목록으로 이동 + }else{ + return CommUtil.doComplete(model, "오류", "정상적인 경로로 접속하세요. 처리오류", "history.back(); "); + } + }else if("deleteProc".equals(boardSearchVO.getSchM()) + ){ + // 삭제프로세스 권한(수정권한을 공유함) + if("user".equals(root) && !boardAuthVO.isUpdate()){ + return CommUtil.doCompleteConfirm(model, "오류", "로그인이 필요한 서비스입니다. \\n로그인 페이지로 이동하시겠습니까?", "location.href='"+loginPageUrl+"'", "history.back();"); + } else if ("user".equals(root) && boardAuthVO.isUpdate()) { + + // 로그인을 하였을 경우, 자기글이 아니면 삭제모드로 진입자체가 안됨. + // 로그인을 하지 않았을 경우, 비회원 글이 아니면 삭제모드로 진입자체가 안됨. + // 따라서 로그인을 하지 않았을 경우에 한하여 패스워드 검사를 하여 다음 프로세스 진행 함. + + if ("".equals(userId) && "".equals(boardVO.getSchSecritPw())) { + model.addAttribute("searchVO", boardSearchVO); + return "itgcms/global/board/user_check_pass"; + } else if ("".equals(userId) && !"".equals(boardVO.getSchSecritPw())) { + if (!boardService.boardPassCheck(boardVO.getId(), CommUtil.hexSha256(boardVO.getSchSecritPw()))) { + return CommUtil.doComplete(model, "오류", "비밀번호가 일치하지 않습니다.", "history.back();"); + } + } + } + + // 삭제프로세스 권한 (관리자) + if("_mngr_".equals(root) && !boardAuthVO.isUpdate()){ + return CommUtil.doComplete(model, "오류", "삭제 권한이 없습니다. 최고관리자에게 문의해주세요", "history.back();"); + } + + String msg = boardService.updateBoardDeleteProc(model, mngrBoardconfigVO, boardSearchVO, boardVO, request, response, returnPage); //"itgcms/global/board/board"; + if(!"".equals(msg)){ + return CommUtil.doComplete(model, "오류", msg, "history.back();"); + } + /* ######################################################################## + * 게시판 삭제 처리 + * ######################################################################## */ + boardSearchVO.setSchM("list"); //수정페이지로 이동 + boardSearchVO.setId(""); + return CommUtil.doComplete(model, "완료", "삭제가 완료 되었습니다.", "location.href='?"+boardSearchVO.getQuery()+"'"); + }else if("chkDelProc".equals(boardSearchVO.getSchM()) + ){ + String[] chkId = request.getParameterValues("chkId"); + // 삭제프로세스 권한(수정권한을 공유함) + if("user".equals(root) && !boardAuthVO.isUpdate()){ + return CommUtil.doCompleteConfirm(model, "오류", "로그인이 필요한 서비스입니다. \\n로그인 페이지로 이동하시겠습니까?", "location.href='"+loginPageUrl+"'", "history.back();"); + } + // 삭제프로세스 권한 (관리자) + if("_mngr_".equals(root) && !boardAuthVO.isUpdate()){ + return CommUtil.doComplete(model, "오류", "삭제 권한이 없습니다. 최고관리자에게 문의해주세요", "history.back();"); + } + String msg = boardService.updateBoardChkDelProc(model, mngrBoardconfigVO, boardSearchVO, boardVO, request, response, returnPage); //"itgcms/global/board/board"; + if(!"".equals(msg)){ + return CommUtil.doComplete(model, "오류", msg, "history.back();"); + } + /* ######################################################################## + * 게시판 다중 삭제 처리 + * ######################################################################## */ + boardSearchVO.setSchM("list"); //수정페이지로 이동 + boardSearchVO.setId(""); + return CommUtil.doComplete(model, "완료", "삭제가 완료 되었습니다.", "location.href='?"+boardSearchVO.getQuery()+"'"); + }else{ + returnPage = getReturnPage(mngrBoardconfigVO, boardSearchVO, "list"); + + /* ######################################################################## + * 게시판 목록 + * ######################################################################## */ + + // 목록페이지 권한 (사용자) + + if("user".equals(root) && !boardAuthVO.isList()){ + return CommUtil.doCompleteConfirm(model, "오류", "로그인이 필요한 서비스입니다. \\n로그인 페이지로 이동하시겠습니까?", "location.href='"+loginPageUrl+"'", "history.back();"); + } + + // 목록페이지 권한 (관리자) + if("_mngr_".equals(root) && !boardAuthVO.isList()){ + return CommUtil.doComplete(model, "오류", "목록을 볼 권한이 없습니다. 최고관리자에게 문의해주세요", "history.back();"); + } + return boardService.selectBoardList(model, mngrBoardconfigVO, boardSearchVO, boardVO, request, response, returnPage); //"itgcms/global/board/board"; + } + } + + + private String getReturnPage(MngrBoardconfigVO mngrBoardconfigVO, BoardSearchVO boardSearchVO, String page){ + String returnPage = "itgcms/global/board/skin/" + + mngrBoardconfigVO.getBcSkin() + + "/" + + boardSearchVO.getRoot() + + "_" + + mngrBoardconfigVO.getBcSkin() + + "_" + page ; + return returnPage; + } + + +} diff --git a/src/main/java/egovframework/itgcms/mngr/boardconfig/web/MngrBoardconfigController.java b/src/main/java/egovframework/itgcms/mngr/boardconfig/web/MngrBoardconfigController.java new file mode 100644 index 0000000..94c8e49 --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/boardconfig/web/MngrBoardconfigController.java @@ -0,0 +1,619 @@ +package egovframework.itgcms.mngr.boardconfig.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigSearchVO; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigService; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigVO; +import egovframework.itgcms.core.code.service.MngrCodeService; +import egovframework.itgcms.core.code.service.MngrCodeVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + + +/** + * @파일명 : MngrBoardconfigController.java + * @파일정보 : 게시판 등록 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class MngrBoardconfigController { + + + /** MngrBoardconfigService */ + @Resource(name = "mngrBoardconfigService") + private MngrBoardconfigService mngrBoardconfigService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** mngrCodeService */ + @Resource(name = "mngrCodeService") + private MngrCodeService mngrCodeService; + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + + + private static final Logger logger = LogManager.getLogger(MngrBoardconfigController.class); + + /** + * 글 목록을 조회한다. (paging) + * @param mngrBoardconfigSearchVO - 조회할 정보가 담긴 PopopSearchVO + * @param model + * @return "itgcms/mngr/boardconfig/_mngr_boardconfigList" + * @exception Exception + */ + @RequestMapping(value = "/_mngr_/boardconfig/mngrBoardconfigList.do") + public String mngrBoardconfigList(@ModelAttribute("searchVO") MngrBoardconfigSearchVO mngrBoardconfigSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + mngrBoardconfigSearchVO.setPageUnit(Integer.parseInt(mngrBoardconfigSearchVO.getViewCount()));//viewCount + mngrBoardconfigSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrBoardconfigSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrBoardconfigSearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrBoardconfigSearchVO.getPageSize()); + + mngrBoardconfigSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrBoardconfigSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrBoardconfigSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List resultList = mngrBoardconfigService.mngrBoardconfigList(mngrBoardconfigSearchVO); + model.addAttribute("resultList", resultList); + int totCnt = mngrBoardconfigService.mngrBoardconfigListTotCnt(mngrBoardconfigSearchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("skinResult", getSkinList("hashmap")); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); //페이지 No 의 시작 값 가상의 넘버링 + + //관리자 권한목록을 hashmap으로 변환 + List mngrAuthList = getMngrAuthList(); + HashMap hmMngrAuth = new HashMap(); + for(HashMap tmp : mngrAuthList){ + hmMngrAuth.put((String)tmp.get("code"), (String)tmp.get("name")); + } + model.addAttribute("hmMngrAuth", hmMngrAuth); + + //관리자 Regist권한목록을 hashmap으로 변환 + List mngrRegistAuthList = getMngrRegistAuthList(); + HashMap hmMngrRegistAuth = new HashMap(); + for(HashMap tmp : mngrRegistAuthList){ + hmMngrRegistAuth.put((String)tmp.get("code"), (String)tmp.get("name")); + } + model.addAttribute("hmMngrRegistAuth", hmMngrRegistAuth); + + //사용자 권한목록을 hashmap으로 변환 + List userAuthList = getUserAuthList(); + HashMap hmUserAuth = new HashMap(); + for(HashMap tmp : userAuthList){ + hmUserAuth.put((String)tmp.get("code"), (String)tmp.get("name")); + } + model.addAttribute("hmUserAuth", hmUserAuth); + + //사용자 Regist권한목록을 hashmap으로 변환 + List userRegistAuthList = getUserRegistAuthList(); + HashMap hmUserRegistAuth = new HashMap(); + for(HashMap tmp : userRegistAuthList){ + hmUserRegistAuth.put((String)tmp.get("code"), (String)tmp.get("name")); + } + model.addAttribute("hmUserRegistAuth", hmUserRegistAuth); + + //사용자 Delete권한목록을 hashmap으로 변환 + List userDeleteAuthList = getUserDeleteAuthList(); + HashMap hmUserDeleteAuth = new HashMap(); + for(HashMap tmp : userDeleteAuthList){ + hmUserDeleteAuth.put((String)tmp.get("code"), (String)tmp.get("name")); + } + model.addAttribute("hmUserDeleteAuth", hmUserDeleteAuth); + + + + return "itgcms/mngr/boardconfig/mngrBoardconfigList"; + } + @RequestMapping(value = "/_mngr_/boardconfig/mngrBoardconfigListAjax.ajax") + public String mngrBoardconfigListAjax(@ModelAttribute("searchVO") MngrBoardconfigSearchVO mngrBoardconfigSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + mngrBoardconfigSearchVO.setPageUnit(Integer.parseInt(mngrBoardconfigSearchVO.getViewCount()));//viewCount + mngrBoardconfigSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrBoardconfigSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrBoardconfigSearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrBoardconfigSearchVO.getPageSize()); + + mngrBoardconfigSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrBoardconfigSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrBoardconfigSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List resultList = mngrBoardconfigService.mngrBoardconfigList(mngrBoardconfigSearchVO); + model.addAttribute("resultList", resultList); + int totCnt = mngrBoardconfigService.mngrBoardconfigListTotCnt(mngrBoardconfigSearchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("skinResult", getSkinList("hashmap")); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); //페이지 No 의 시작 값 가상의 넘버링 + return "itgcms/mngr/boardconfig/mngrBoardconfigListAjax"; + } + + /** + * 등록 페이지 + * @param mngrBoardconfigSearchVO + * @param model + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/boardconfig/mngrBoardconfigRegist.do") + public String mngrBoardconfigRegist(@ModelAttribute("searchVO") MngrBoardconfigSearchVO mngrBoardconfigSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + mngrBoardconfigSearchVO.setAct("REGIST"); + + + + MngrBoardconfigVO result = new MngrBoardconfigVO(); + result.setBcViewcount("10"); //게시판목록갯수 디폴트로 10 설정함 + model.addAttribute("result", result); + model.addAttribute("searchVO", mngrBoardconfigSearchVO); + model.addAttribute("skinList", getSkinList("list")); + model.addAttribute("mngrAuthList", getMngrAuthList()); + model.addAttribute("userAuthList", getUserAuthList()); + model.addAttribute("mngrRegistAuthList", getMngrRegistAuthList()); + model.addAttribute("userRegistAuthList", getUserRegistAuthList()); + model.addAttribute("userDeleteAuthList", getUserDeleteAuthList()); + + return "itgcms/mngr/boardconfig/mngrBoardconfigRegist"; + } + + /** + * 게시판 아이디 중복 여부(ajax) + * @param mngrBoardconfigSearchVO + * @param model + * @param response + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/boardconfig/mngrBoardconfigCheckId.ajax") + public void mngrBoardconfigCheckId(@ModelAttribute("searchVO") MngrBoardconfigSearchVO mngrBoardconfigSearchVO, ModelMap model, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String result = "0"; + String message = "알수없는 오류가 발생했습니다. 다시 시도해 주세요."; + if(!"".equals(CommUtil.isNull(mngrBoardconfigSearchVO.getId(), ""))){ + int resultCount = mngrBoardconfigService.mngrBoardconfigCheckId(mngrBoardconfigSearchVO); + if(resultCount > 0 ){ + result = "2"; + message = "중복된 아이디 입니다."; + }else{ + result = "1"; + message = "사용 가능한 아이디 입니다."; + } + } + String json = "{\"result\" : "+result+", \"message\" : \""+message+"\"}"; + CommUtil.printWriter(json, response); + } + + /** + * 수정 페이지 + * @param mngrBoardconfigSearchVO + * @param model + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/boardconfig/mngrBoardconfigView.do") + public String mngrBoardconfigView(@ModelAttribute("searchVO") MngrBoardconfigSearchVO mngrBoardconfigSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + mngrBoardconfigSearchVO.setAct("UPDATE"); + + model.addAttribute("result", mngrBoardconfigService.mngrBoardconfigView(mngrBoardconfigSearchVO)); + model.addAttribute("searchVO", mngrBoardconfigSearchVO); + model.addAttribute("skinList", getSkinList("list")); + model.addAttribute("mngrAuthList", getMngrAuthList()); + model.addAttribute("userAuthList", getUserAuthList()); + model.addAttribute("mngrRegistAuthList", getMngrRegistAuthList()); + model.addAttribute("userRegistAuthList", getUserRegistAuthList()); + model.addAttribute("userDeleteAuthList", getUserDeleteAuthList()); + + return "itgcms/mngr/boardconfig/mngrBoardconfigRegist"; + } + + /** + * 등록 페이지의 저장 처리 + * @param mngrBoardconfigSearchVO + * @param model + * @param boardconfigVO + * @param request + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/boardconfig/mngrBoardconfigRegistProc.do") + public String mngrBoardconfigRegistProc(@ModelAttribute("searchVO") MngrBoardconfigSearchVO mngrBoardconfigSearchVO, ModelMap model, MngrBoardconfigVO boardconfigVO, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + //입력 값 유효 체크 + // 게시판 아이디, 이름,스킨, 목록갯수,목록권한,뷰조회권한,등록권한,답변권한,기본페이지 + if("".equals( CommUtil.isNull( boardconfigVO.getBcId() , "") )) return CommUtil.doComplete(model, "오류", "게시판 아이디를 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcName() , "") )) return CommUtil.doComplete(model, "오류", "게시판 이름을 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcSkin() , "") )) return CommUtil.doComplete(model, "오류", "게시판 스킨을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcViewcount() , "") )) return CommUtil.doComplete(model, "오류", "목록 갯수를 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcList() , "") )) return CommUtil.doComplete(model, "오류", "목록권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcView() , "") )) return CommUtil.doComplete(model, "오류", "뷰 조회권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcRegist() , "") )) return CommUtil.doComplete(model, "오류", "등록권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcUpdate() , "") )) return CommUtil.doComplete(model, "오류", "수정권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcReply() , "") )) return CommUtil.doComplete(model, "오류", "답변권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcReplyyn() , "") )) return CommUtil.doComplete(model, "오류", "답변사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcFileyn() , "") )) return CommUtil.doComplete(model, "오류", "첨부파일사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcNoticeyn() , "") )) return CommUtil.doComplete(model, "오류", "공지글사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcGroupyn() , "") )) return CommUtil.doComplete(model, "오류", "카테고리사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcEditoryn() , "") )) return CommUtil.doComplete(model, "오류", "에디터사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcPrevnextyn() , "") )) return CommUtil.doComplete(model, "오류", "이전/다음글사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcDefaultpage() , "") )) return CommUtil.doComplete(model, "오류", "기본페이지를 입력 해 주세요.", "history.back();"); + + if("Y".equals(boardconfigVO.getBcFileyn())){ + if("".equals( CommUtil.isNull( boardconfigVO.getBcFilecount() , "") )) return CommUtil.doComplete(model, "오류", "첨부파일 갯수를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcFilesize() , "") )) return CommUtil.doComplete(model, "오류", "첨부파일 용량제한을 선택 해 주세요.", "history.back();"); + } + if("".equals( CommUtil.isNull( boardconfigVO.getBcFilecount() , "") )) {boardconfigVO.setBcFilecount("0");} + if("".equals( CommUtil.isNull( boardconfigVO.getBcFilesize() , "") )) {boardconfigVO.setBcFilesize("0");} + + //게시판 아이디 첫글자 영문 체크 + if(!CommUtil.regEx("^[a-zA-Z]", boardconfigVO.getBcId())) return CommUtil.doComplete(model, "오류", "게시판 아이디 첫글자는 영문자로 입력 해 주세요.", "history.back();"); + if(CommUtil.regEx("[^a-zA-Z0-9_]", boardconfigVO.getBcId())) return CommUtil.doComplete(model, "오류", "게시판 아이디는 영문, 숫자, _ 만 입력 가능합니다.", "history.back();"); + + //게시판 아이디 중복 검사 + mngrBoardconfigSearchVO.setId(boardconfigVO.getBcId()); + int resultCount = mngrBoardconfigService.mngrBoardconfigCheckId(mngrBoardconfigSearchVO); + if(resultCount > 0) return CommUtil.doComplete(model, "오류", "중복된 게시판 아이디 입니다. 확인 후 다시 시도하세요." , "history.back();"); + + //게시판 카테고리에 코드를 만들어 놓는다. 사용여부와 상관없이 만들어 놓음. + MngrCodeVO mngrCodeVO = new MngrCodeVO(); + mngrCodeVO.setSchCode("board");//설치시 게시판카테고리용 코드관리가 등록돼있음 + mngrCodeVO.setCcode("_" + boardconfigVO.getBcId());//게시판 카테고리 코드는 앞에 _를 붙인다. + mngrCodeVO.setCname(boardconfigVO.getBcName()); + mngrCodeVO.setRegmemid(CommUtil.getMngrMemId()); + mngrCodeService.insertCode(mngrCodeVO); + + boardconfigVO.setRegmemid(CommUtil.getMngrMemId()); + mngrBoardconfigService.mngrBoardconfigRegistProc(boardconfigVO); + + return CommUtil.doComplete(model, "완료", "등록 되었습니다.", "location.href='mngrBoardconfigList.do?"+mngrBoardconfigSearchVO.getQuery()+"'"); + } + + /** + * 수정페이지 저장 처리 + * @param mngrBoardconfigSearchVO + * @param model + * @param boardconfigVO + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/boardconfig/mngrBoardconfigUpdateProc.do") + public String mngrBoardconfigUpdateProc(@ModelAttribute("searchVO") MngrBoardconfigSearchVO mngrBoardconfigSearchVO, ModelMap model, MngrBoardconfigVO boardconfigVO) throws IOException, SQLException, RuntimeException { + //입력 값 유효 체크 + // 게시판 아이디, 이름,스킨, 목록갯수,목록권한,뷰조회권한,등록권한,답변권한,기본페이지 + if("".equals( CommUtil.isNull( boardconfigVO.getBcName() , "") )) return CommUtil.doComplete(model, "오류", "게시판 이름을 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcSkin() , "") )) return CommUtil.doComplete(model, "오류", "게시판 스킨을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcViewcount() , "") )) return CommUtil.doComplete(model, "오류", "목록 갯수를 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcList() , "") )) return CommUtil.doComplete(model, "오류", "목록권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcView() , "") )) return CommUtil.doComplete(model, "오류", "뷰 조회권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcRegist() , "") )) return CommUtil.doComplete(model, "오류", "등록권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcUpdate() , "") )) return CommUtil.doComplete(model, "오류", "수정권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcReply() , "") )) return CommUtil.doComplete(model, "오류", "답변권한을 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcReplyyn() , "") )) return CommUtil.doComplete(model, "오류", "답변사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcFileyn() , "") )) return CommUtil.doComplete(model, "오류", "첨부파일사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcNoticeyn() , "") )) return CommUtil.doComplete(model, "오류", "공지글사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcGroupyn() , "") )) return CommUtil.doComplete(model, "오류", "카테고리사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcEditoryn() , "") )) return CommUtil.doComplete(model, "오류", "에디터사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcPrevnextyn() , "") )) return CommUtil.doComplete(model, "오류", "이전/다음글사용여부를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcDefaultpage() , "") )) return CommUtil.doComplete(model, "오류", "기본페이지를 입력 해 주세요.", "history.back();"); + + if("Y".equals(boardconfigVO.getBcFileyn())){ + if("".equals( CommUtil.isNull( boardconfigVO.getBcFilecount() , "") )) return CommUtil.doComplete(model, "오류", "첨부파일 갯수를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( boardconfigVO.getBcFilesize() , "") )) return CommUtil.doComplete(model, "오류", "첨부파일 용량제한을 선택 해 주세요.", "history.back();"); + } + if("".equals( CommUtil.isNull( boardconfigVO.getBcFilecount() , "") )) {boardconfigVO.setBcFilecount("0");} + if("".equals( CommUtil.isNull( boardconfigVO.getBcFilesize() , "") )) {boardconfigVO.setBcFilesize("0");} + boardconfigVO.setUpdmemid(CommUtil.getMngrMemId()); + mngrBoardconfigService.mngrBoardconfigUpdateProc(boardconfigVO); /** impl에서 코드관리의 게시판명도 수정되도록 처리 */ + + return CommUtil.doComplete(model, "완료", "수정 되었습니다.", "location.href='mngrBoardconfigView.do?"+mngrBoardconfigSearchVO.getQuery()+"'"); + } + + /** + * 삭제 처리 페이지 + * @param mngrBoardconfigSearchVO + * @param model + * @param boardconfigVO + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/boardconfig/mngrBoardconfigDelProc.do") + public String mngrBoardconfigDelProc(@ModelAttribute("searchVO") MngrBoardconfigSearchVO mngrBoardconfigSearchVO, ModelMap model, MngrBoardconfigVO boardconfigVO) throws IOException, SQLException, RuntimeException { + boardconfigVO.setDelmemid(CommUtil.getMngrMemId()); + mngrBoardconfigService.mngrBoardconfigDelProc(boardconfigVO); + return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='mngrBoardconfigList.do?"+mngrBoardconfigSearchVO.getQuery()+"'"); + + } + /** + * 삭제 처리 페이지 : 다중삭제(목록페이지에서 다중선택 후 삭제) + * @param mngrBoardconfigSearchVO + * @param model + * @param boardconfigVO + * @param request + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/boardconfig/mngrBoardconfigChkDelProc.do") + public String mngrBoardconfigChkDelProc(@ModelAttribute("searchVO") MngrBoardconfigSearchVO mngrBoardconfigSearchVO, ModelMap model, MngrBoardconfigVO boardconfigVO, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + boardconfigVO.setDelmemid(CommUtil.getMngrMemId()); + mngrBoardconfigService.mngrBoardconfigChkDelProc(boardconfigVO); + return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='mngrBoardconfigList.do?"+mngrBoardconfigSearchVO.getQuery()+"'"); + } + + /** + * 게시판 목록(Ajax) + * @param mngrBoardconfigSearchVO + * @param response + * @throws IOException, SQLException, RuntimeException + */ + /*@RequestMapping(value = "/_mngr_/boardconfig/mngrBoardconfigListAjax.ajax") + public void mngrBoardconfigListAjax(@ModelAttribute("searchVO") MngrBoardconfigSearchVO mngrBoardconfigSearchVO, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + + mngrBoardconfigSearchVO.setPageUnit(10);//viewCount + mngrBoardconfigSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrBoardconfigSearchVO.getPage()); + //** paging setting *//* + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrBoardconfigSearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrBoardconfigSearchVO.getPageSize()); + + mngrBoardconfigSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrBoardconfigSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrBoardconfigSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List result = mngrBoardconfigService.mngrBoardconfigList(mngrBoardconfigSearchVO); + int totCnt = mngrBoardconfigService.mngrBoardconfigListTotCnt(mngrBoardconfigSearchVO); + paginationInfo.setTotalRecordCount(totCnt); + + String json = "{\"total\":\""+paginationInfo.getTotalRecordCount()+"\",\"currentPage\":\""+paginationInfo.getCurrentPageNo()+"\", \"totalPage\":\""+paginationInfo.getTotalPageCount()+"\",\"result\": ["; + for(int i = 0; i < result.size(); i++){ + MngrBoardconfigVO boardconfig = (MngrBoardconfigVO)result.get(i); + json += String.format("{\"bcId\":\"%s\",\"bcName\":\"%s\",\"bcSkin\":\"%s\"}", boardconfig.getBcId(), boardconfig.getBcName(), boardconfig.getBcSkin()); + if(i < result.size() - 1){ + json += ","; + } + + } + json += "]}"; + CommUtil.printWriter(json, response); + }*/ + + /** + * 카테고리 등록(코드 등록 서비스를 사용하지만, 코드를 자동 생성 한다) + * @param mngrCodeVO + * @param response + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/boardconfig/mngrBoardconfigCategoryRegist.ajax") + public void mngrBoardconfigCategoryRegist(MngrCodeVO mngrCodeVO, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String result = "0"; + if("".equals( CommUtil.isNull( mngrCodeVO.getSchCode() , "") )){ // 게시판코드 free + result = "2"; + }else if("".equals( CommUtil.isNull( mngrCodeVO.getCpcode() , "") )) { //부모코드 _free + result = "3"; + }else if("".equals( CommUtil.isNull( mngrCodeVO.getCname() , "") )) { //코드명 구분 + result = "4"; + }else{ + String newCode = mngrCodeVO.getCpcode(); + MngrCodeVO tmpCodeVO = mngrCodeService.mngrCodeMaxCode(mngrCodeVO); + if(tmpCodeVO == null || tmpCodeVO.getCcode() == null){ + newCode = newCode + "01"; + }else{ + String tmpCode = tmpCodeVO.getCcode().replaceAll(newCode, ""); + newCode = mngrCodeVO.getCpcode() + CommUtil.getZeroPlus(Integer.valueOf(tmpCode) + 1); + } + mngrCodeVO.setRegmemid(CommUtil.getMngrMemId()); + mngrCodeVO.setCcode(newCode); + mngrCodeVO.setSchCode(mngrCodeVO.getCpcode()); // 저장시에 부모코드는 schCode값을 저장한다. + mngrCodeService.insertCode(mngrCodeVO); + + result = "1"; + } + + + CommUtil.printWriter("{\"result\":\""+result+"\"}", response); + } + + + public Object getSkinList(String returnType){ + String path = CommUtil.getContextRoot() + System.getProperty("file.separator") + + "WEB-INF" + System.getProperty("file.separator") + + "jsp" + System.getProperty("file.separator") + + "egovframework" + System.getProperty("file.separator") + + "itgcms" + System.getProperty("file.separator") + + "global" + System.getProperty("file.separator") + + "board" + System.getProperty("file.separator") + + "skin"; + path = CommUtil.getFilePathReplace(path); + java.io.File f = new java.io.File(path); + java.io.File []folder = f.listFiles(); + + List> skinList = new java.util.ArrayList>(); + HashMap result = new HashMap(); + + int count = 0; + for(int i = 0;i < folder.length; i++){ + if(folder[i].isDirectory()){ + String tmpPath = path + System.getProperty("file.separator") + folder[i].getName(); + tmpPath = CommUtil.getFilePathReplace(tmpPath); + java.io.File skinFile[] =( new java.io.File(tmpPath)).listFiles(); + boolean hasSkinFile = false; + boolean hasTitleFile = false; + String title = ""; + for(int j = 0; j < skinFile.length; j++){ + String filename = skinFile[j].getName(); + if(CommUtil.regEx("(user|_mngr_)_"+folder[i].getName()+"_.*\\.jsp", filename)){ + hasSkinFile = true; + } + if(filename.indexOf(".") == -1){ + hasTitleFile = true; + title = skinFile[j].getName(); + } + } + if(hasSkinFile && hasTitleFile){ + // resulstType List + HashMap hm = new HashMap(); + hm.put("code", folder[i].getName()); + hm.put("name", title); + skinList.add(count, hm); + + // resultType hashmap + result.put(folder[i].getName(), title); + } + } + } + + return ("list".equals(returnType)? skinList : result); + } + /* + * 사용자:비회원 100 + * 사용자:회원 200 + * 사용자:작성자 210 + * 사용자:권한없음 900 + * + * 관리자:부서 300 + * 관리자:작성자 310 + * 관리자:관리자 900 + */ + public List getUserAuthList(){ + HashMap hm = new HashMap(); + List authList = new java.util.ArrayList(); + hm = new HashMap(); + hm.put("name", "사용자:비회원"); + hm.put("code", "100"); + authList.add(0, hm); + + hm = new HashMap(); + hm.put("name", "사용자:회원"); + hm.put("code", "200"); + authList.add(1, hm); + + hm = new HashMap(); + hm.put("name", "사용자:작성자"); + hm.put("code", "210"); + authList.add(2, hm); + + hm = new HashMap(); + hm.put("name", "권한없음"); + hm.put("code", "900"); + authList.add(3, hm); + + return authList; + } + public List getUserRegistAuthList(){ + HashMap hm = new HashMap(); + List authList = new java.util.ArrayList(); + hm = new HashMap(); + hm.put("name", "사용자:비회원"); + hm.put("code", "100"); + authList.add(0, hm); + + hm = new HashMap(); + hm.put("name", "사용자:회원"); + hm.put("code", "200"); + authList.add(1, hm); + + hm = new HashMap(); + hm.put("name", "권한없음"); + hm.put("code", "900"); + authList.add(2, hm); + + return authList; + } + public List getUserDeleteAuthList(){ + HashMap hm = new HashMap(); + List authList = new java.util.ArrayList(); + + hm = new HashMap(); + hm.put("name", "사용자:비회원"); + hm.put("code", "100"); + authList.add(0, hm); + + hm = new HashMap(); + hm.put("name", "사용자:회원"); + hm.put("code", "200"); + authList.add(1, hm); + + hm = new HashMap(); + hm.put("name", "사용자:작성자"); + hm.put("code", "210"); + authList.add(2, hm); + + hm = new HashMap(); + hm.put("name", "권한없음"); + hm.put("code", "900"); + authList.add(3, hm); + + return authList; + } + public List getMngrAuthList(){ + HashMap hm = new HashMap(); + List authList = new java.util.ArrayList(); + hm = new HashMap(); + hm.put("name", "관리자:전체"); + hm.put("code", "200"); + authList.add(0, hm); + + /*hm = new HashMap(); + hm.put("name", "관리자:부서"); + hm.put("code", "300"); + authList.add(1, hm);*/ + + hm = new HashMap(); + hm.put("name", "관리자:작성자"); + hm.put("code", "310"); + authList.add(1, hm); + + hm = new HashMap(); + hm.put("name", "관리자:통합관리자"); + hm.put("code", "900"); + authList.add(2, hm); + return authList; + } + public List getMngrRegistAuthList(){ + HashMap hm = new HashMap(); + List authList = new java.util.ArrayList(); + hm = new HashMap(); + hm.put("name", "관리자:전체"); + hm.put("code", "200"); + authList.add(0, hm); + + hm = new HashMap(); + hm.put("name", "관리자:통합관리자"); + hm.put("code", "900"); + authList.add(1, hm); + return authList; + } +} diff --git a/src/main/java/egovframework/itgcms/mngr/code/web/MngrCodeController.java b/src/main/java/egovframework/itgcms/mngr/code/web/MngrCodeController.java new file mode 100644 index 0000000..8a9214c --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/code/web/MngrCodeController.java @@ -0,0 +1,195 @@ +package egovframework.itgcms.mngr.code.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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 egovframework.itgcms.common.MngrSessionVO; +import egovframework.itgcms.core.code.service.MngrCodeService; +import egovframework.itgcms.core.code.service.MngrCodeVO; +import egovframework.itgcms.util.CommUtil; + +/** + * @파일명 : MngrCodeController.java + * @파일정보 : 코드 등록 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 3.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class MngrCodeController { + + /** mngrCodeService */ + @Resource(name = "mngrCodeService") + private MngrCodeService mngrCodeService; + + private static final Logger logger = LogManager.getLogger(MngrCodeController.class); + + /** + * 관리자 코드관리 메인 화면 + * @param model + * @param request + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value="/_mngr_/code/mngrCodeMain.do") + public String mngrCodeMain(ModelMap model, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + return "itgcms/mngr/code/mngrCodeMain"; + } + + + /** + * 코드 목록 Ajax 용 데이터 + * @param mngrMngrCodeVO + * @param model + * @param request + * @param response + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value="/comm/code/treeCodeList.ajax") + public void treeCodeList(@ModelAttribute("mngrCodeVO") MngrCodeVO mngrCodeVO, ModelMap model, HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException, SQLException, RuntimeException { + MngrSessionVO mngrSessionVO = (MngrSessionVO)session.getAttribute("mngrSessionVO"); + mngrCodeVO.setCauth(CommUtil.isNull(mngrSessionVO.getMngAuth(), "00")); + List result = mngrCodeService.mngrCodeList(mngrCodeVO); + String json = "["; + for(int i = 0; i < result.size(); i++){ + MngrCodeVO tmpCodeVO = (MngrCodeVO) result.get(i); + json += "{" + + "\"id\": \"" + tmpCodeVO.getCcode() + "\" " + + ",\"name\": \"" + tmpCodeVO.getCname() + "\" " + + ",\"pId\": \"" + tmpCodeVO.getCpcode() + "\" " + + ",\"tId\": \"" + tmpCodeVO.getCcode() + "\" " + + ",\"depth\": \"" + tmpCodeVO.getCdepth() + "\" " + + "}" ; + if(i < result.size() - 1){ + json += ","; + } + } + json += "]"; + CommUtil.printWriter(json, response); + } + + + /** + * 코드를 등록한다. + * @param mngrCodeVO + * @param model + * @param request + * @param response + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value="/_mngr_/code/mngrCodeRegistAjax.do") + public String mngrCodeRegist(@ModelAttribute("mngrCodeVO") MngrCodeVO mngrCodeVO, ModelMap model, HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException, SQLException, RuntimeException { + model.addAttribute("mngrSessionVO", (MngrSessionVO)session.getAttribute("mngrSessionVO")); + model.addAttribute("result", mngrCodeService.mngrCodeRegistAjax(mngrCodeVO)); + model.addAttribute("searchVO", mngrCodeVO); + return "itgcms/mngr/code/mngrCodeRegistAjax"; + } + + @RequestMapping(value="/_mngr_/code/mngrCodeDupleCheck.ajax") + public void mngrCodeDupleCheck(@ModelAttribute("mngrCodeVO") MngrCodeVO mngrCodeVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + int resultCnt = mngrCodeService.mngrCodeDupleCheck(mngrCodeVO); + String json = "{\"result\" : "+resultCnt+"}"; + CommUtil.printWriter(json, response); + } + + @RequestMapping(value="/_mngr_/code/mngrCodeRegistUpdateAjax.ajax") + public void mngrCodeRegistUpdateAjax(@ModelAttribute("mngrCodeVO") MngrCodeVO mngrCodeVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String result = "0"; + String message = "데이터 저장 중 오류가 발생했습니다. 다시 시도해 주세요"; + + if("REGIST".equals(mngrCodeVO.getAct())){ + /* + * 등록 모드 + */ + // 입력값 체크 + if("".equals(CommUtil.isNull(mngrCodeVO.getCcode(), ""))){ + result = "3"; + message = "코드를 입력 해 주세요."; + } else if("".equals(CommUtil.isNull(mngrCodeVO.getCname(), ""))){ + result = "3"; + message = "코드이름을 입력 해 주세요."; + }else { //입력값 정상 + int resultCnt = mngrCodeService.mngrCodeDupleCheck(mngrCodeVO); //코드 중복 검사 + if(resultCnt > 0){ + result = "2"; + message = "코드가 중복 되었습니다. 확인 후 다시 시도해 주세요"; + }else{ + // 코드 정상 + mngrCodeVO.setRegmemid(CommUtil.getMngrMemId()); + mngrCodeService.insertCode(mngrCodeVO); + result = "1"; + message = "등록 되었습니다."; + } + } + + }else if("UPDATE".equals(mngrCodeVO.getAct())){ + /* + * 수정 모드 + */ + if("".equals(CommUtil.isNull(mngrCodeVO.getSchCode(), ""))){ + result = "3"; + message = "코드정보가 없습니다. 확인 후 다시 시도해 주세요."; + } else if("".equals(CommUtil.isNull(mngrCodeVO.getCname(), ""))){ + result = "3"; + message = "코드이름을 입력 해 주세요."; + }else { //입력값 정상 + mngrCodeVO.setUpdmemid(CommUtil.getMngrMemId()); + mngrCodeService.mngrCodeUpdate(mngrCodeVO); + result = "1"; + message = "수정 되었습니다."; + } + } + String json = "{\"result\" : "+result+", \"message\" : \""+message+"\"}"; + CommUtil.printWriter(json, response); + } + @RequestMapping(value="/_mngr_/code/mngrCodeChngDefaultAjax.ajax") + public void mngrCodeChngDefaultAjax(@ModelAttribute("mngrCodeVO") MngrCodeVO mngrCodeVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + MngrCodeVO tmpCodeVO = mngrCodeService.mngrCodeRegistAjax(mngrCodeVO); + int resutl = 0; + mngrCodeVO.setUpdmemid(CommUtil.getMngrMemId()); + resutl = mngrCodeService.mngrCodeChngDefaultAjax(mngrCodeVO); + String json = "{\"result\" : "+resutl+"}"; + CommUtil.printWriter(json, response); + } + @RequestMapping(value="/_mngr_/code/mngrCodeRegistDeleteAjax.ajax") + public void mngrCodeRegistDeleteAjax(@ModelAttribute("mngrCodeVO") MngrCodeVO mngrCodeVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + MngrCodeVO tmpCodeVO = mngrCodeService.mngrCodeRegistAjax(mngrCodeVO); + String resutl = "0"; + if(tmpCodeVO.getSubtree() > 0){ + resutl = "2"; + }else{ + mngrCodeVO.setDelmemid(CommUtil.getMngrMemId()); + mngrCodeService.mngrCodeRegistDeleteAjax(mngrCodeVO); + resutl = "1"; + } + String json = "{\"result\" : "+resutl+"}"; + CommUtil.printWriter(json, response); + } + @RequestMapping(value="/_mngr_/code/mngrCodeSwap.ajax") + public void mngrCodeSwap(@ModelAttribute("mngrCodeVO") MngrCodeVO mngrCodeVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String resutl = "0"; + resutl = mngrCodeService.mngrCodeSwap(mngrCodeVO); + String json = "{\"result\" : "+resutl+"}"; + CommUtil.printWriter(json, response); + } +} + diff --git a/src/main/java/egovframework/itgcms/mngr/group/web/MngrGroupController.java b/src/main/java/egovframework/itgcms/mngr/group/web/MngrGroupController.java new file mode 100644 index 0000000..dbb73da --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/group/web/MngrGroupController.java @@ -0,0 +1,226 @@ +package egovframework.itgcms.mngr.group.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.itgcms.core.code.service.MngrCodeService; +import egovframework.itgcms.core.group.service.MngrGroupSearchVO; +import egovframework.itgcms.core.group.service.MngrGroupService; +import egovframework.itgcms.core.group.service.MngrGroupVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + + +/** + * @파일명 : MngrGroupController.java + * @파일정보 : 부서 등록 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class MngrGroupController { + + + /** MngrGroupService */ + @Resource(name = "mngrGroupService") + private MngrGroupService mngrGroupService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** mngrCodeService */ + @Resource(name = "mngrCodeService") + private MngrCodeService mngrCodeService; + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + + + private static final Logger logger = LogManager.getLogger(MngrGroupController.class); + + /** + * 글 목록을 조회한다. (paging) + * @param mngrGroupSearchVO - 조회할 정보가 담긴 PopopSearchVO + * @param model + * @return "itgcms/mngr/group/_mngr_groupList" + * @exception Exception + */ + @RequestMapping(value = "/_mngr_/group/mngrGroupList.do") + public String mngrGroupList(@ModelAttribute("searchVO") MngrGroupSearchVO mngrGroupSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + mngrGroupSearchVO.setPageUnit(Integer.parseInt(mngrGroupSearchVO.getViewCount()));//viewCount + mngrGroupSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrGroupSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrGroupSearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrGroupSearchVO.getPageSize()); + + mngrGroupSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrGroupSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrGroupSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List resultList = mngrGroupService.mngrGroupList(mngrGroupSearchVO); + model.addAttribute("resultList", resultList); + int totCnt = mngrGroupService.mngrGroupListTotCnt(mngrGroupSearchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); //페이지 No 의 시작 값 가상의 넘버링 + return "itgcms/mngr/group/mngrGroupList"; + } + + /** + * 등록 페이지 + * @param mngrGroupSearchVO + * @param model + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/group/mngrGroupRegist.do") + public String mngrGroupRegist(@ModelAttribute("searchVO") MngrGroupSearchVO mngrGroupSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + mngrGroupSearchVO.setAct("REGIST"); + + MngrGroupVO result = new MngrGroupVO(); + model.addAttribute("result", result); + model.addAttribute("searchVO", mngrGroupSearchVO); + return "itgcms/mngr/group/mngrGroupRegist"; + } + + /** + * 수정 페이지 + * @param mngrGroupSearchVO + * @param model + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/group/mngrGroupView.do") + public String mngrGroupView(@ModelAttribute("searchVO") MngrGroupSearchVO mngrGroupSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + mngrGroupSearchVO.setAct("UPDATE"); + + model.addAttribute("result", mngrGroupService.mngrGroupView(mngrGroupSearchVO)); + model.addAttribute("searchVO", mngrGroupSearchVO); + return "itgcms/mngr/group/mngrGroupRegist"; + } + + /** + * 등록 페이지의 저장 처리 + * @param mngrGroupSearchVO + * @param model + * @param groupVO + * @param request + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/group/mngrGroupRegistProc.do") + public String mngrGroupRegistProc(@ModelAttribute("searchVO") MngrGroupSearchVO mngrGroupSearchVO, ModelMap model, MngrGroupVO groupVO, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + //입력 값 유효 체크 +// if("".equals( CommUtil.isNull( groupVO.getProgName() , "") )) return CommUtil.doComplete(model, "오류", "부서 명을 입력 해 주세요.", "history.back();"); +// if("".equals( CommUtil.isNull( groupVO.getProgUserurl() , "") )) return CommUtil.doComplete(model, "오류", "사용자 URL을 입력 해 주세요.", "history.back();"); +// if("".equals( CommUtil.isNull( groupVO.getProgMngrurl() , "") )) return CommUtil.doComplete(model, "오류", "관리자 URL을 입력 해 주세요.", "history.back();"); + + mngrGroupService.mngrGroupRegistProc(groupVO); + + return CommUtil.doComplete(model, "완료", "등록 되었습니다.", "location.href='mngrGroupList.do?"+mngrGroupSearchVO.getQuery()+"'"); + } + + /** + * 수정페이지 저장 처리 + * @param mngrGroupSearchVO + * @param model + * @param groupVO + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/group/mngrGroupUpdateProc.do") + public String mngrGroupUpdateProc(@ModelAttribute("searchVO") MngrGroupSearchVO mngrGroupSearchVO, ModelMap model, MngrGroupVO groupVO) throws IOException, SQLException, RuntimeException { + //입력 값 유효 체크 +// if("".equals( CommUtil.isNull( groupVO.getProgName() , "") )) return CommUtil.doComplete(model, "오류", "부서 명을 입력 해 주세요.", "history.back();"); +// if("".equals( CommUtil.isNull( groupVO.getProgUserurl() , "") )) return CommUtil.doComplete(model, "오류", "사용자 URL을 입력 해 주세요.", "history.back();"); +// if("".equals( CommUtil.isNull( groupVO.getProgMngrurl() , "") )) return CommUtil.doComplete(model, "오류", "관리자 URL을 입력 해 주세요.", "history.back();"); + + + mngrGroupService.mngrGroupUpdateProc(groupVO); + + return CommUtil.doComplete(model, "완료", "수정 되었습니다.", "location.href='mngrGroupView.do?"+mngrGroupSearchVO.getQuery()+"'"); + } + + /** + * 삭제 처리 페이지 + * @param mngrGroupSearchVO + * @param model + * @param groupVO + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/group/mngrGroupDelProc.do") + public String mngrGroupDelProc(@ModelAttribute("searchVO") MngrGroupSearchVO mngrGroupSearchVO, ModelMap model, MngrGroupVO groupVO) throws IOException, SQLException, RuntimeException { + mngrGroupService.mngrGroupDelProc(groupVO); + return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='mngrGroupList.do?"+mngrGroupSearchVO.getQuery()+"'"); + + } + + /** + * 게시판 목록(Ajax) + * @param mngrGroupSearchVO + * @param response + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/group/mngrGroupListAjax.ajax") + public void mngrGroupListAjax(@ModelAttribute("searchVO") MngrGroupSearchVO mngrGroupSearchVO, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + + mngrGroupSearchVO.setPageUnit(10);//viewCount + mngrGroupSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrGroupSearchVO.getPage()); + //** paging setting *//* + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrGroupSearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrGroupSearchVO.getPageSize()); + + mngrGroupSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrGroupSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrGroupSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List result = mngrGroupService.mngrGroupList(mngrGroupSearchVO); + int totCnt = mngrGroupService.mngrGroupListTotCnt(mngrGroupSearchVO); + paginationInfo.setTotalRecordCount(totCnt); + + String json = "{\"total\":\""+paginationInfo.getTotalRecordCount()+"\",\"currentPage\":\""+paginationInfo.getCurrentPageNo()+"\", \"totalPage\":\""+paginationInfo.getTotalPageCount()+"\",\"result\": ["; + for(int i = 0; i < result.size(); i++){ + MngrGroupVO group = (MngrGroupVO)result.get(i); +// json += String.format("{\"progIdx\":\"%s\",\"progName\":\"%s\",\"progUserurl\":\"%s\",\"progMngrurl\":\"%s\"}", group.getProgIdx(), group.getProgName(), group.getProgUserurl(), group.getProgMngrurl()); + if(i < result.size() - 1){ + json += ","; + } + + } + json += "]}"; + CommUtil.printWriter(json, response); + } + +} diff --git a/src/main/java/egovframework/itgcms/mngr/joinformconfig/web/MngrContractController.java b/src/main/java/egovframework/itgcms/mngr/joinformconfig/web/MngrContractController.java new file mode 100644 index 0000000..235ff7c --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/joinformconfig/web/MngrContractController.java @@ -0,0 +1,237 @@ +package egovframework.itgcms.mngr.joinformconfig.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.itgcms.common.MngrSessionVO; +import egovframework.itgcms.core.joinformconfig.service.MngrContractSearchVO; +import egovframework.itgcms.core.joinformconfig.service.MngrContractService; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.psl.dataaccess.util.EgovMap; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + + +/** + * @파일명 : MngrMemeberConfigController.java + * @파일정보 : 회원 설정 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2017. 5. 15. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class MngrContractController { + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + + @Resource(name="contractService") + private MngrContractService contractService; + + private static final Logger logger = LogManager.getLogger(MngrContractController.class); + + @RequestMapping(value = "/_mngr_/contract/mngrContractMain.do") + public String mngrGetContractList(@ModelAttribute("searchVO") MngrContractSearchVO contractSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + + contractSearchVO.setPageUnit(Integer.parseInt(contractSearchVO.getViewCount()));//viewCount + contractSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(contractSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(contractSearchVO.getPageUnit()); + paginationInfo.setPageSize(contractSearchVO.getPageSize()); + + contractSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + contractSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + contractSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + int totCnt = contractService.mngrContractTotCnt(contractSearchVO); + List resultList = contractService.mngrGetContractList(contractSearchVO); + model.addAttribute("resultList", resultList); + + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); //페이지 No 의 시작 값 가상의 넘버링 + + return "itgcms/mngr/menu/contractList"; + } + + + @RequestMapping(value = "/_mngr_/contract/contractRegist.do") + public String mngrRegistContactContents(@ModelAttribute("searchVO") MngrContractSearchVO contractSearchVO) throws IOException, SQLException, RuntimeException{ + contractSearchVO.setAct("REGIST"); + return "itgcms/mngr/menu/mngrContractRegist"; + } + + @RequestMapping(value = "/_mngr_/contract/contractView.do") + public String mngrGetContractObj(@ModelAttribute("searchVO") MngrContractSearchVO contractSearchVO) throws IOException, SQLException, RuntimeException { + contractSearchVO.setAct("UPDATE"); + contractService.mngrGetContractObj(contractSearchVO); + return "itgcms/mngr/menu/mngrContractRegist"; + } + + @RequestMapping(value = "/_mngr_/contract/mngrContractProc.do") + public String mngrContractUpdateProc(@ModelAttribute("searchVO") MngrContractSearchVO contractSearchVO, ModelMap model, HttpSession session) throws IOException, SQLException, RuntimeException{ + + String result = CommUtil.doComplete(model, "완료", "알수 없는 오류가 발생하였습니다. 다시 시도 해주십시오.", "location.href = 'contractView.do?"+contractSearchVO.getQuery()+"'"); + MngrSessionVO mngrSessionVo = (MngrSessionVO)session.getAttribute("mngrSessionVO"); + String mngrId = mngrSessionVo.getId(); + contractSearchVO.setContents(CommUtil.decodeHTMLTagFilter(contractSearchVO.getContents())); + + if ("UPDATE".equalsIgnoreCase(contractSearchVO.getAct())) { + // update + contractSearchVO.setUpdMemId(mngrId); + contractService.mngrUpdateContract(contractSearchVO); + result = CommUtil.doComplete(model, "완료", "성공적으로 수정 되었습니다.", "location.href = 'contractView.do?"+contractSearchVO.getQuery()+"'"); + } else { + // insert + contractSearchVO.setRegMemId(mngrId); + contractService.mngrRegistContract(contractSearchVO); + result = CommUtil.doComplete(model, "완료", "성공적으로 등록 되었습니다.", "location.href = 'mngrContractMain.do'"); + } + + return result; + } + + @RequestMapping(value="/_mngr_/contract/mngrContractDelProc.do") + public String mngrContractDelProc(@ModelAttribute("searchVO") MngrContractSearchVO contractSearchVO, ModelMap model, HttpSession session, HttpServletRequest request) throws IOException, SQLException, RuntimeException{ + String result = CommUtil.doComplete(model, "완료", "알수 없는 오류가 발생하였습니다. 다시 시도 해주십시오.", "location.href = 'mngrContractMain.do?"+contractSearchVO.getQuery()+"'"); + + MngrSessionVO mngrSessionVo = (MngrSessionVO)session.getAttribute("mngrSessionVO"); + String mngrId = mngrSessionVo.getId(); + String delNoDesc = request.getParameter("nos"); + + int delRows = 0; + + contractSearchVO.setDelMemId(mngrId); + if (delNoDesc == null) { + delRows = contractService.mngrDeleteContract(contractSearchVO); + result = CommUtil.doComplete(model, "완료", "성공적으로 삭제 되었습니다.", "location.href = 'mngrContractMain.do?"+contractSearchVO.getQuery()+"'"); + } else { + delRows = contractService.mngrDeleteContractList(contractSearchVO, delNoDesc); + result = CommUtil.doComplete(model, "완료", String.valueOf(delRows)+"개의 데이터가 성공적으로 삭제 되었습니다.", "location.href = 'mngrContractMain.do?"+contractSearchVO.getQuery()+"'"); + } + + return result; + } + + @RequestMapping(value = "/_mngr_/program/mngrContract.do") + public String mngrContractView(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + + String menuCode = request.getParameter("menuCode"); + String progIdx = request.getParameter("progIdx"); + String returnPage = "itgcms/global/program/contract/mngrContract"; + + model.addAttribute("contractList", contractService.mngrGetContractList()); + model.addAttribute("menuCode", menuCode); + model.addAttribute("progIdx", progIdx); + + EgovMap paramMap = new EgovMap(); + paramMap.put("menuCode", menuCode); + paramMap.put("progIdx", progIdx); + EgovMap resultMap = contractService.getMenuContractInfo(paramMap); + + if(resultMap != null){ + model.addAttribute("result", resultMap); + paramMap.put("contractDesc", resultMap.get("contractNo").toString().split(",")); + model.addAttribute("contractResultList", contractService.mngrGetContractListByContractDesc(paramMap)); + }/*else{ + CommUtil.doComplete(model, "오류", "프로그램 정보가 올바르지 않습니다", "history.back();"); + }*/ + + return returnPage; + } + + @RequestMapping(value="/_mngr_/program/mngrContractRegistAjax.ajax") + public void mngrContractRegistAjax(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String result = "0"; + String message = "데이터 저장 중 오류가 발생했습니다. 다시 시도해 주세요"; + + // 입력값 체크 + if("".equals(CommUtil.isNull(request.getParameter("contractNo"), ""))){ + result = "3"; + message = "약관을 선택 해 주세요."; + }else { //입력값 정상 + EgovMap egovMap = new EgovMap(); + egovMap.put("menuCode", request.getParameter("menuCode")); + egovMap.put("progIdx", CommUtil.isNull(request.getParameter("progIdx"),"7")); + egovMap.put("contractNo", request.getParameter("contractNo")); + egovMap.put("opt", CommUtil.isNull(request.getParameter("opt"), "one")); + + int resultCnt = contractService.setMenuContractInfo(egovMap); + if(resultCnt > 0){ + result = "1"; + message = "등록 되었습니다."; + }else{ + result = "2"; + message = "등록에 실패하였습니다. 관리자에게 문의해주세요"; + } + + } + + String json = "{\"result\" : "+result+", \"message\" : \""+message+"\"}"; + CommUtil.printWriter(json, response); + } + + @RequestMapping(value = "/{root}/program/contract.do") + public String userContractView(@PathVariable String root,ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + + List resultList = new ArrayList(); + MngrContractSearchVO contractSearchVO = new MngrContractSearchVO(); + + String menuCode = request.getParameter("menuCode"); + String progIdx = request.getParameter("progIdx"); + String returnPage = "itgcms/global/program/contract/userContract"; + String opt = ""; + + String site = CommUtil.isNull(CommUtil.getSiteFile(), "web"); + site = site.replaceAll("\\n", ""); + site = "(" + site + ")"; + if(!CommUtil.regEx(site, root)) return CommUtil.doComplete(model, "오류", "정상적인 경로로 접속 해 주세요", "history.back();"); + EgovMap egovMap = new EgovMap(); + egovMap.put("menuCode", menuCode); + egovMap.put("progIdx", progIdx); + + egovMap = contractService.getMenuContractInfo(egovMap); + + if(egovMap != null){ + + egovMap.put("contractDesc", egovMap.get("contractNo").toString().split(",")); + + contractService.mngrGetContractListByContractDesc(egovMap); + model.addAttribute("menuCode", menuCode); + model.addAttribute("progIdx", progIdx); + model.addAttribute("result", egovMap); + model.addAttribute("contractList", contractService.mngrGetContractList()); + model.addAttribute("contractResultList", contractService.mngrGetContractListByContractDesc(egovMap)); + }else{ + CommUtil.doComplete(model, "오류", "페이지 정보가 올바르지 않습니다", "history.back();"); + } + + model.addAttribute("resultList", resultList); + return returnPage; + } +} diff --git a/src/main/java/egovframework/itgcms/mngr/joinformconfig/web/MngrJoinFormConfigController.java b/src/main/java/egovframework/itgcms/mngr/joinformconfig/web/MngrJoinFormConfigController.java new file mode 100644 index 0000000..c429650 --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/joinformconfig/web/MngrJoinFormConfigController.java @@ -0,0 +1,128 @@ +package egovframework.itgcms.mngr.joinformconfig.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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 org.springframework.web.bind.annotation.ResponseBody; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.itgcms.common.MngrSessionVO; +import egovframework.itgcms.core.joinformconfig.service.MngrContractService; +import egovframework.itgcms.core.joinformconfig.service.MngrJoinFormConfigSearchVO; +import egovframework.itgcms.core.joinformconfig.service.MngrJoinFormConfigService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + + +/** + * @파일명 : MngrMemeberConfigController.java + * @파일정보 : 회원 설정 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2017. 5. 15. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +@RequestMapping("/_mngr_/joinformconfig/*") +public class MngrJoinFormConfigController { + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + + @Resource(name="joinFormConfigService") + private MngrJoinFormConfigService joinFormConfigSerivce; + + @Resource(name="contractService") + private MngrContractService contractService; + + private static final Logger logger = LogManager.getLogger(MngrJoinFormConfigController.class); + + /** + * 회원 가입 폼 설정 목록을 조회한다. (paging) + * @param model + * @return "itgcms/mngr/memeberconfig/formList" + * @exception Exception + */ + @RequestMapping(value = "/formList.do") + public String mngrJoinFormConfigList(@ModelAttribute("searchVO") MngrJoinFormConfigSearchVO mngrJoinConfigSearchVo, HttpServletRequest request, ModelMap model) throws IOException, SQLException, RuntimeException { + mngrJoinConfigSearchVo.setPageUnit(Integer.parseInt(mngrJoinConfigSearchVo.getViewCount()));//viewCount + mngrJoinConfigSearchVo.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrJoinConfigSearchVo.getPage()); + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrJoinConfigSearchVo.getPageUnit()); + paginationInfo.setPageSize(mngrJoinConfigSearchVo.getPageSize()); + + mngrJoinConfigSearchVo.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrJoinConfigSearchVo.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrJoinConfigSearchVo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List resultList = joinFormConfigSerivce.mngrJoinFormConfigList(mngrJoinConfigSearchVo); + int totCnt = joinFormConfigSerivce.mngrJoinFormConfigTotCnt(mngrJoinConfigSearchVo); + + model.addAttribute("resultList", resultList); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("searchVo", mngrJoinConfigSearchVo); + + return "itgcms/mngr/joinformconfig/formList"; + } + + @RequestMapping(value = "/mngrJoinFormRegist.do") + public String mngrRegisteJoinFormConfig(@ModelAttribute("searchVO") MngrJoinFormConfigSearchVO mngrJoinConfigSearchVo, ModelMap model, @RequestParam(value="siteCode", required=false) String siteCode) throws IOException, SQLException, RuntimeException{ + + joinFormConfigSerivce.mngrGetJoinFormBySiteCode(siteCode, mngrJoinConfigSearchVo); + + model.addAttribute("siteCode", mngrJoinConfigSearchVo.getSiteCode()); + model.addAttribute("contractList", contractService.mngrGetContractList()); + model.addAttribute("searchVO", mngrJoinConfigSearchVo); + + return "itgcms/mngr/joinformconfig/formConfigInfo"; + } + + + /** + * 회원 가입 폼 설정 목록을 조회한다. (paging) + * @param model + * @return "itgcms/mngr/memeberconfig/formList" + * @exception Exception + */ + @RequestMapping(value = "/mngrFormConfigRegistProc.do", method=RequestMethod.POST) + @ResponseBody + public int mngrJoinFormRegist(@ModelAttribute("searchVO") MngrJoinFormConfigSearchVO mngrJoinConfigSearchVo, ModelMap model, HttpSession session) throws IOException, SQLException, RuntimeException { + MngrSessionVO mngrSessionVo = (MngrSessionVO)session.getAttribute("mngrSessionVO"); + String mngrId = mngrSessionVo.getId(); + + int result = 0; + + if (mngrJoinConfigSearchVo.getNo()>0) { + result = 1; + mngrJoinConfigSearchVo.setUpdMemId(mngrId); + joinFormConfigSerivce.mngrModifyJoinFormConfig(mngrJoinConfigSearchVo); + } else { + result = 2; + mngrJoinConfigSearchVo.setRegMemId(mngrId); + joinFormConfigSerivce.mngrRegistJoinFormConfig(mngrJoinConfigSearchVo); + } + return result; + } +} diff --git a/src/main/java/egovframework/itgcms/mngr/main/web/MngrMainController.20180930_bak b/src/main/java/egovframework/itgcms/mngr/main/web/MngrMainController.20180930_bak new file mode 100644 index 0000000..0629d9a --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/main/web/MngrMainController.20180930_bak @@ -0,0 +1,557 @@ +package egovframework.itgcms.mngr.main.web; + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.sql.SQLException; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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.springmodules.validation.commons.DefaultBeanValidator; + +import com.ibm.icu.text.SimpleDateFormat; + +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.common.MngrSessionVO; +import egovframework.itgcms.core.board.service.BoardSearchVO; +import egovframework.itgcms.core.board.service.BoardService; +import egovframework.itgcms.core.board.service.BoardVO; +import egovframework.itgcms.core.main.service.MngrMainService; +import egovframework.itgcms.core.main.service.MngrManagerMenuVO; +import egovframework.itgcms.core.manager.service.MngrManagerLoginLogVO; +import egovframework.itgcms.core.manager.service.MngrManagerService; +import egovframework.itgcms.core.manager.service.MngrManagerVO; +import egovframework.itgcms.core.member.service.MemberService; +import egovframework.itgcms.core.stats.service.MngrCountVO; +import egovframework.itgcms.core.stats.service.MngrStatsService; +import egovframework.itgcms.core.systemconfig.service.SystemconfigVO; +import egovframework.itgcms.util.CommUtil; + +/** + * @파일명 : MngrMainController.java + * @파일정보 : 관리자 메인 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class MngrMainController { + + /** MngrMainService */ + @Resource(name = "mngrMainService") + private MngrMainService mngrMainService; + + /** mngrManagerService */ + @Resource(name = "mngrManagerService") + protected MngrManagerService mngrManagerService; + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + + /** MemberService */ + @Resource(name = "memberService") + private MemberService memberService; + + /** MngrSiteService */ + @Resource(name = "mngrStatsService") + private MngrStatsService mngrStatsService; + + /** BoardService */ + @Resource(name = "boardService") + private BoardService boardService; + + private static final Logger logger = LogManager.getLogger(MngrMainController.class); + + @RequestMapping(value = "/main/index.do") + public String Index(ModelMap model, HttpServletRequest request, HttpSession session, HttpServletResponse response ) throws IOException, SQLException, RuntimeException { + + SystemconfigVO systemconfigVO = CommUtil.getSystemconfigVO(request, "systemconfig"); + + String underConstr = systemconfigVO.getUnderConstr(); // 점검중 페이지 1.사용, 2.미사용 + String siteGubun = systemconfigVO.getSiteGubun(); // 사이트구분 1.서브디렉토리방식, 2.서브도메인방식 + String domainAddr = systemconfigVO.getDomainAddr(); + String rootCode = ""; + String returnUrl = ""; + + if("1".equals(underConstr)){ + model.addAttribute("systemconfigVO", systemconfigVO); + return "itgcms/user/main/underConstruction"; + } + + if("2".equals(siteGubun)){ + //rootCode = (request.getRequestURL()).toString().split("//")[1].split("[.]")[0]; + rootCode = (request.getRequestURL()).toString().split("//")[1]; + + if(rootCode.indexOf(domainAddr) < 0){ + returnUrl = CommUtil.doCompleteUrl(model, "알림", "도메인 주소가 올바르지 않습니다. 메인 사이트로 이동합니다.", "/web/main/index.do"); + }else if(rootCode.indexOf(domainAddr) == 0){ + returnUrl = "redirect:/web/main/index.do"; + }else{ + rootCode = rootCode.substring(0, rootCode.indexOf(domainAddr)-1); + if("www".equals(rootCode)){ + returnUrl = "redirect:/web/main/index.do"; + }else{ + + + String site = CommUtil.isNull(CommUtil.getSiteFile(), "web"); + site = site.replaceAll("\\n", ""); + site = "(" + site + ")"; + + if(CommUtil.regEx(site, rootCode)) { + returnUrl = "redirect:/"+rootCode+"/main/index.do"; + }else{ + returnUrl = CommUtil.doCompleteUrl(model, "알림", "사이트 설정이 올바르지 않습니다. 기본 사이트로 이동합니다.", "/web/main/index.do"); + } + } + } + }else{ + returnUrl = "redirect:/web/main/index.do"; + } + + return returnUrl; + } + + @RequestMapping(value = "/_mngr_/main/index.do") + public String mngrMainIndex(HttpServletRequest request, ModelMap model, HttpSession session) throws IOException, SQLException, RuntimeException { + + /* 대쉬보드 데이터 조회 */ + // 1. 신규 회원 + int memberRegistCount = memberService.getMemberRegistCount(); + + logger.debug("########################################################" + memberRegistCount + "#################################################"); + + // 2. 오늘 방문자 수 + String yyyy = CommUtil.getDatePattern("yyyy"); + String mm = CommUtil.getDatePattern("MM"); + String dd = CommUtil.getDatePattern("dd"); + + MngrCountVO paramCountVO = new MngrCountVO(); + paramCountVO.setCntOption("DAY"); + paramCountVO.setCntYear( yyyy ); + paramCountVO.setCntMonth( mm ); + paramCountVO.setCntDay( dd ); + paramCountVO.setSchDate( yyyy+"-"+mm+"-"+dd); + int todayVisitCount = mngrStatsService.getTodayVisitCount(paramCountVO); + + // 3. 이번달 접속 수 + paramCountVO = new MngrCountVO(); + paramCountVO.setCntOption("MONTH"); + paramCountVO.setCntYear( yyyy ); + paramCountVO.setCntMonth( mm ); + paramCountVO.setCntDay( dd ); + paramCountVO.setSchDate( yyyy+"-"+mm+"-"+dd); + int monthVisitCount = mngrStatsService.getTodayVisitCount(paramCountVO); + + // 4. 전체 접속 수 + paramCountVO = new MngrCountVO(); + paramCountVO.setCntOption("YEAR_GROUP"); + paramCountVO.setCntYear( yyyy ); + paramCountVO.setCntMonth( mm ); + paramCountVO.setCntDay( dd ); + paramCountVO.setSchDate( yyyy+"-"+mm+"-"+dd); + int totalVisitCount = mngrStatsService.getTodayVisitCount(paramCountVO); + + //사용자 입력 게시판 가져오기 + BoardSearchVO boardSearchVO = new BoardSearchVO(); + boardSearchVO.setSchBcid("request"); //QNA. + boardSearchVO.setFirstIndex(0); + boardSearchVO.setLastIndex(5); + + // QNA 목록 + /* List boardList = boardService.selectBoardMainList(boardSearchVO); + model.addAttribute("boardList", boardList);*/ + + // 1주일 접속 이력 + paramCountVO = new MngrCountVO(); + paramCountVO.setCntOption("DAY"); + paramCountVO.setStartDate(CommUtil.dateAdd(CommUtil.getDatePattern("yyyy-MM-dd"), -30)); + paramCountVO.setEndDate(CommUtil.getDatePattern("yyyy-MM-dd")); + paramCountVO.setSiteCode("all"); + + Calendar calendar = Calendar.getInstance(); + Date endDate = new Date(calendar.getTimeInMillis()+60*60*24*1000);//1일 추가 + + SimpleDateFormat dateStr = new SimpleDateFormat("yyyy-MM-dd"); + paramCountVO.setEndDate(dateStr.format(endDate)); + + calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)-30); + Date startDate = new Date(calendar.getTimeInMillis()); + paramCountVO.setStartDate(dateStr.format(startDate)); + + List resultList = mngrStatsService.mngrTermCountListforMain(paramCountVO); + + // 브라우저 별 접속 (도넛) + paramCountVO = new MngrCountVO(); + paramCountVO.setCntOption("BROWSER"); + paramCountVO.setSiteCode("all"); + List resultBrowserList = mngrStatsService.mngrOptionCountList(paramCountVO); + + // 디바이스 별 접속 (도넛) + paramCountVO = new MngrCountVO(); + paramCountVO.setCntOption("DEVICE"); + paramCountVO.setSiteCode("all"); + List resultDeviceList = mngrStatsService.mngrOptionCountList(paramCountVO); + + model.addAttribute("resultList", resultList); + + List recentBoardList = boardService.getBoardList(null, null, 6); + + model.addAttribute("recentlyBoard", recentBoardList); + + model.addAttribute("memberRegistCount", memberRegistCount); + model.addAttribute("todayVisitCount", todayVisitCount); + model.addAttribute("monthVisitCount", monthVisitCount); + model.addAttribute("totalVisitCount", totalVisitCount); + model.addAttribute("resultBrowserList", resultBrowserList); + model.addAttribute("resultDeviceList", resultDeviceList); + model.addAttribute("systemconfigVO", CommUtil.getSystemconfigVO(request, "systemconfig")); + + return "itgcms/mngr/main/mngrMainIndex"; + } + + @RequestMapping(value = "/_mngr_/main/login.do") + public String mngrMainLogin(ModelMap model, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + + model.addAttribute("systemconfigVO", CommUtil.getSystemconfigVO(request, "systemconfig")); + model.addAttribute("referer", CommUtil.isNull(request.getHeader("REFERER"), "")); + //return "mngr/main/mngrMainLogin"; + return "itgcms/mngr/main/mngrMainLogin"; + } + + @RequestMapping(value = "/_mngr_/_include/mngrInclude_HEADER.do") + public String mngrInclude_HEADER(@ModelAttribute("mngrManagerMenuVO") MngrManagerMenuVO mngrManagerMenuVO, ModelMap model, HttpServletRequest request, HttpSession session) throws IOException, SQLException, RuntimeException, NoSuchAlgorithmException { + + MngrSessionVO mngrSessionVO = getLicenseLogin(model, request, session); + ItgMap licenseVO = CommUtil.getSystemLicenseVO(request, "license"); + String lId = CommUtil.seedDec256(CommUtil.isNull(licenseVO.getValue(0),"")); + +// MngrSessionVO mngrSessionVO = (MngrSessionVO)session.getAttribute("mngrSessionVO"); + + if (mngrSessionVO == null) { + return CommUtil.doComplete(model, "오류", "로그인 후 이용 가능합니다.", "location.href='/_mngr_/main/login.do'"); + } + + //전체 메뉴 가져오기 + //mngrManagerMenuVO.setId(mngrManagerMenuVO.getId()); + mngrManagerMenuVO.setSchStr(mngrSessionVO.getMngAuth()); + mngrManagerMenuVO.setSchLicenseType(mngrSessionVO.getLicenseType()); + mngrManagerMenuVO.setId("sysmenu"); + mngrManagerMenuVO.setMinDepth("3"); + mngrManagerMenuVO.setSchFld(mngrSessionVO.getType()); + mngrManagerMenuVO.setLogMemid(mngrSessionVO.getId()); + if(lId.equals(mngrManagerMenuVO.getLogMemid())) mngrManagerMenuVO.setAct("super"); + List resultList = mngrMainService.mngrManagerMenuListRecursive(mngrManagerMenuVO); + String mngrRoot = request.getContextPath()+"/_mngr_/"; + String resultStr = ""; + for(int i = 0; i < resultList.size(); i++){ + MngrManagerMenuVO menuVO = (MngrManagerMenuVO)resultList.get(i); + String preStr = ""; + String iconSet = ""; + if(!"".equals(menuVO.getMenuIcon())){ + iconSet = ""; + } + preStr += "
  • \n"; + preStr += "\n"; + preStr += iconSet+""+menuVO.getMenuName()+"\n"; + String str = ""; + if(menuVO.getMngrManagerMenuList() != null){ + str = recursiveMngrMenu(menuVO.getMngrManagerMenuList(), 0, "LEFT", 2, 4, mngrRoot); + } + if(!"".equals(str)){ + preStr += "\n"; + str = "
      \n"+str + "
    \n"; + } + if("POPUP".equals(menuVO.getMenuCode().toUpperCase())){ + + List popupTabList = CommUtil.getConfigFromXml("popup"); + preStr += "\n"; + + for(int j = 0; j < popupTabList.size(); j++){ + HashMap popupTab = popupTabList.get(j); +// if (!"POPUPWIN".equalsIgnoreCase(String.valueOf(popupTab.get("value")))) { // 관리자 메뉴 중 팝업창 제외 + String popupCode = CommUtil.isNull(popupTab.get("code"), ""); + String popupName = CommUtil.isNull(popupTab.get("name"), ""); + str += "
  • "; + str += ""; + str += " "; + str += popupName+"
  • "; +// } + + } + str = "
      \n"+str + "
    \n"; + } + preStr += "\n"; + + resultStr += preStr + str + "\n"; + } + + //얼굴이미지 random 바꾸기 + Calendar calendar = Calendar.getInstance(); + long ct = calendar.getTimeInMillis();//System.currentTimeMillis(); + int ran = (int) (ct / 1000)+1; + if(ran%2 == 0){ + model.addAttribute("logo", "gov");//정부이미지 + } else { + model.addAttribute("logo", "ts");//ts 이미지 + } + + model.addAttribute("resultStr", resultStr); + model.addAttribute("systemconfigVO", CommUtil.getSystemconfigVO(request, "systemconfig")); + + return "itgcms/mngr/_include/mngrInclude_HEADER"; + } + + /** + * SNB(LNB) 타입 B 인클루드 재귀호출 + * @param result + * @param siteCode + * @param count + * @param type + * @param sDepth + * @param eDepth + * @return + */ + @SuppressWarnings("unchecked") + private String recursiveMngrMenu(List result, int count, String type, int sDepth, int eDepth, String mngrRoot){ + String str = ""; + int nowCount = count; + String depth = ""; + for(int i = 0;i < result.size(); i++){ + MngrManagerMenuVO menuVO = result.get(i); + depth = menuVO.getMenuDepth(); + String idName = ""; //left메뉴 선택표시를 위한 아이디설정 + + idName = "id=\""+type+"_"+menuVO.getMenuCode()+"\""; + + if(menuVO.getMngrManagerMenuList() != null && menuVO.getMngrManagerMenuList().size() > 0){//하위메뉴가 있으면 하위메뉴 호출 (재귀호출) + str += "
  • \n"; + str += getMenuLink(menuVO, mngrRoot, depth); + if(Integer.valueOf(menuVO.getMenuDepth()) >= sDepth && Integer.valueOf(menuVO.getMenuDepth()) <= eDepth){ + if(menuVO.getMngrManagerMenuList().size() > 0) + str += recursiveMngrMenu(menuVO.getMngrManagerMenuList(), ++count, type, sDepth, eDepth, mngrRoot); + } + }else{ + str += "
  • \n"; + str += getMenuLink(menuVO, mngrRoot, depth); + } + str += "
  • \n"; + } + if(nowCount > 0){//처음엔 ul이 필요없음.(코딩에 의한 설정) + + String dp = ""; + if(!"".equals(depth)) dp = String.valueOf(Integer.parseInt(depth) - 2); + if("2".equals(dp) || "3".equals(dp)){ + str = "\n
      \n" + str + "
    \n"; + }else{ + str = "\n
      \n" + str + "
    \n"; + } + } + return str; + } + + private String getMenuLink(MngrManagerMenuVO menuVO, String mngrRoot, String depth){ + String url = "#none"; //url에 입력된 값이 없으면 링크 없음 + String str = ""; + if(!"".equals(menuVO.getMenuUrl())){ + url = mngrRoot+menuVO.getMenuUrl()+".do"; + } + str += ""; + + if("5".equals(depth)){ + str += " "; + }else{ + str += " "; + } + str += menuVO.getMenuName().replaceAll("&", "&")+""; + if(menuVO.getMngrManagerMenuList() != null && menuVO.getMngrManagerMenuList().size() > 0){//서브메뉴가 있으면 + str += "\n"; + } + str += ""; + return str; + } + + public MngrSessionVO getLicenseLogin(ModelMap model, HttpServletRequest request, HttpSession session) throws IOException, SQLException, RuntimeException, NoSuchAlgorithmException { + + ItgMap licenseVO = CommUtil.getSystemLicenseVO(request, "license"); + + MngrManagerVO loginManagerVO = new MngrManagerVO(); + + loginManagerVO.setMngId(CommUtil.seedDec256(CommUtil.isNull(licenseVO.getValue(0), ""))); + loginManagerVO.setMngName("관리자"); + loginManagerVO.setMngEmail(""); + loginManagerVO.setMngPhone(""); + loginManagerVO.setAuthIdx("0"); + loginManagerVO.setMngType("1"); + loginManagerVO.setMngPower("99"); + loginManagerVO.setMngAuth("99"); + loginManagerVO.setMngIp(CommUtil.seedDec256(CommUtil.isNull(licenseVO.getValue(4), ""))); + + java.util.HashMap hmAgent = CommUtil.getUserAgentParse(request.getHeader("User-Agent")); + + MngrManagerLoginLogVO mngrManagerLoginLogVO = new MngrManagerLoginLogVO(); + mngrManagerLoginLogVO.setLogIp(CommUtil.getClientIP(request)); + mngrManagerLoginLogVO.setLogId(loginManagerVO.getMngId()); + mngrManagerLoginLogVO.setLogAgent(request.getHeader("User-Agent")); + mngrManagerLoginLogVO.setLogType("1");//1:관리자, 2:사용자 + mngrManagerLoginLogVO.setLogDevice((String)hmAgent.get("device")); + mngrManagerLoginLogVO.setLogOs((String)hmAgent.get("os")); + mngrManagerLoginLogVO.setLogBrowser((String)hmAgent.get("browser")); + mngrManagerLoginLogVO.setLogSite("_mngr_"); + mngrManagerService.mngrManagerLoginLogInsert(mngrManagerLoginLogVO); + + + MngrSessionVO mngrSessionVO = new MngrSessionVO(); + mngrSessionVO.setId(loginManagerVO.getMngId()); + mngrSessionVO.setName(loginManagerVO.getMngName()); + mngrSessionVO.setEmail(loginManagerVO.getMngEmail()); + mngrSessionVO.setPhone(loginManagerVO.getMngPhone()); + mngrSessionVO.setAuthority(loginManagerVO.getAuthIdx()); + mngrSessionVO.setType(loginManagerVO.getMngType()); + mngrSessionVO.setGroupName(loginManagerVO.getGroupCodeName()); + mngrSessionVO.setPositionName(loginManagerVO.getPositionCodeName()); + mngrSessionVO.setMngAuth(loginManagerVO.getMngAuth()); + mngrSessionVO.setLicenseType(CommUtil.seedDec256(licenseVO.getValue(3).toString())); + + if(mngrManagerLoginLogVO.getLogIp().equals(loginManagerVO.getMngIp())){ + mngrSessionVO.setMngPower("Y"); + }else{ + mngrSessionVO.setMngPower("N"); + } + + //세션에 관리자 VO 저장 + session.setAttribute("mngrSessionVO", mngrSessionVO); + + return mngrSessionVO; + } + + @RequestMapping({"/_mngr_/main/loginProc.do"}) + public String mngrMainLoginProc(@ModelAttribute("managerVO") MngrManagerVO managerVO, ModelMap model, HttpServletRequest request, HttpSession session) + throws IOException, SQLException, RuntimeException, NoSuchAlgorithmException { + + if ("".equals(CommUtil.isNull(managerVO.getMngId(), ""))) { + return CommUtil.doComplete(model, "로그인 오류", "아이디를 입력 해 주세요.", "history.back();"); + } + if ("".equals(CommUtil.isNull(managerVO.getMngPass(), ""))) { + return CommUtil.doComplete(model, "로그인 오류", "비밀번호를 입력 해 주세요.", "history.back();"); + } + ItgMap licenseVO = CommUtil.getSystemLicenseVO(request, "license"); + // if (licenseVO.size() != 4) { + // return CommUtil.doComplete(model, "오류", "허가된 사용자가 아닙니다.", "location.href='/_mngr_/main/login.do'"); + // } + // if (("".equals(CommUtil.isNull(licenseVO.getValue(3), ""))) || ((!"M".equals(CommUtil.isNull(licenseVO.getValue(3), ""))) && (!"S".equals(CommUtil.isNull(licenseVO.getValue(3), ""))))) { + // return CommUtil.doComplete(model, "오류", "라이센스 정보가 올바르지 않습니다.", "location.href='/_mngr_/main/login.do'"); + // } + managerVO.setId(managerVO.getMngId()); + + MngrManagerVO loginManagerVO = this.mngrManagerService.mngrManagerView(managerVO); + if (loginManagerVO == null) { + return CommUtil.doComplete(model, "로그인 오류", "아이디 또는 비밀번호를 확인 해 주세요.", "history.back();"); + } + if ((!"127.0.0.1".equals(request.getRemoteAddr())) && (!"0:0:0:0:0:0:0:1".equals(request.getRemoteAddr()))) { + if (("Y".equals(loginManagerVO.getMngIpyn())) && (!"".equals(loginManagerVO.getMngIp()))) + { + String[] ip = loginManagerVO.getMngIp().split(","); + String userIp = request.getRemoteAddr(); + boolean access = false; + for (int i = 0; i < ip.length; i++) { + if (ip[i].startsWith(userIp)) { + access = true; + } + } + if (!access) { + return CommUtil.doComplete(model, "로그인 오류", "허용된 IP 접속이 아닙니다. 관리자에게 문의 해 주세요.\\n\\n접속 IP : " + userIp, "history.back();"); + } + } + else if (("Y".equals(loginManagerVO.getMngIpyn())) && ("".equals(loginManagerVO.getMngIp()))) + { + return CommUtil.doComplete(model, "로그인 오류", "허용된 IP로 접속 해 주세요.", "history.back("); + } + } + + int mngPassTryCnt = Integer.valueOf(CommUtil.isNull(loginManagerVO.getMngPasstrycnt(), "0")).intValue(); + if (mngPassTryCnt > 5) { + return CommUtil.doComplete(model, "로그인 오류", "비밀번호 오류 횟수가 5회 초과되어 로그인 할 수 없습니다.\\n관리자에게 문의 하세요.", "history.back();"); + } + if (!CommUtil.hexSha256(managerVO.getMngPass()).equals(loginManagerVO.getMngPass())) + { + mngPassTryCnt++; + + managerVO.setMngPasstrycnt(String.valueOf(mngPassTryCnt)); + this.mngrManagerService.increaseMngPassTryCnt(managerVO); + String msg = "아이디 또는 비밀번호 를 확인 해 주세요.\\n로그인 실패 (" + String.valueOf(mngPassTryCnt) + " / 5)"; + if (mngPassTryCnt > 5) { + msg = "로그인 실패 횟수가 5회 초과되어 더이상 로그인 할 수 없습니다.\\n관리자에게 문의 하세요."; + } + return CommUtil.doComplete(model, "로그인 오류", msg, "history.back();"); + } + + managerVO.setMngPasstrycnt(String.valueOf(0)); + this.mngrManagerService.increaseMngPassTryCnt(managerVO); + + HashMap hmAgent = CommUtil.getUserAgentParse(request.getHeader("User-Agent")); + + MngrManagerLoginLogVO mngrManagerLoginLogVO = new MngrManagerLoginLogVO(); + mngrManagerLoginLogVO.setLogIp(CommUtil.getClientIP(request)); + mngrManagerLoginLogVO.setLogId(loginManagerVO.getMngId()); + mngrManagerLoginLogVO.setLogAgent(request.getHeader("User-Agent")); + mngrManagerLoginLogVO.setLogType("1"); + mngrManagerLoginLogVO.setLogDevice((String)hmAgent.get("device")); + mngrManagerLoginLogVO.setLogOs((String)hmAgent.get("os")); + mngrManagerLoginLogVO.setLogBrowser((String)hmAgent.get("browser")); + mngrManagerLoginLogVO.setLogSite("_mngr_"); + this.mngrManagerService.mngrManagerLoginLogInsert(mngrManagerLoginLogVO); + + MngrSessionVO mngrSessionVO = new MngrSessionVO(); + mngrSessionVO.setId(loginManagerVO.getMngId()); + mngrSessionVO.setName(loginManagerVO.getMngName()); + mngrSessionVO.setEmail(loginManagerVO.getMngEmail()); + mngrSessionVO.setPhone(loginManagerVO.getMngPhone()); + mngrSessionVO.setGroup(loginManagerVO.getGroupCode()); + mngrSessionVO.setPosition(loginManagerVO.getPositionCode()); + mngrSessionVO.setAuthority(loginManagerVO.getAuthIdx()); + mngrSessionVO.setType(loginManagerVO.getMngType()); + + mngrSessionVO.setGroupName(loginManagerVO.getGroupCodeName()); + mngrSessionVO.setPositionName(loginManagerVO.getPositionCodeName()); + mngrSessionVO.setMngAuth(loginManagerVO.getMngAuth()); + mngrSessionVO.setLicenseType(licenseVO.getValue(3).toString()); + + session.setAttribute("mngrSessionVO", mngrSessionVO); + + return CommUtil.doComplete(model, "로그인", "로그인 되었습니다.", "location.href='/_mngr_/main/index.do'"); + } + + @RequestMapping(value = "/_mngr_/main/logout.do") + public String logout(ModelMap model, HttpSession session) throws IOException, SQLException, RuntimeException { + session.setAttribute("mngrSessionVO", null); + return CommUtil.doComplete(model, "로그인아웃", "", "location.href='/_mngr_/main/login.do'"); +// return CommUtil.doComplete(model, "로그인아웃", "로그아웃 되었습니다.", "location.href='/_mngr_/main/login.do'"); + } + + @RequestMapping(value = "/_mngr_/main/siteConfig.do") + public String siteConfig(ModelMap model, HttpSession session) throws IOException, SQLException, RuntimeException { + session.setAttribute("adm_type", "super"); + logger.debug("로그인 처리:"); + return "mngr/main/siteConfig"; + } + +} diff --git a/src/main/java/egovframework/itgcms/mngr/main/web/MngrMainController.java b/src/main/java/egovframework/itgcms/mngr/main/web/MngrMainController.java new file mode 100644 index 0000000..041678b --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/main/web/MngrMainController.java @@ -0,0 +1,67 @@ +package egovframework.itgcms.mngr.main.web; + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.sql.SQLException; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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.springmodules.validation.commons.DefaultBeanValidator; + +import com.ibm.icu.text.SimpleDateFormat; + +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.common.MngrSessionVO; +import egovframework.itgcms.util.CommUtil; + +/** + * @파일명 : MngrMainController.java + * @파일정보 : 관리자 메인 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2019.06.03. 최초생성 + * @--------------------------------------- + * @author sanguri + * @since 2018. 04.23 + * @version 1.0 Copyright (C)XIT All right reserved. + */ + +@Controller +public class MngrMainController { + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + + private static final Logger logger = LogManager.getLogger(MngrMainController.class); + + @RequestMapping(value = "/main/index.do") + public String Index(ModelMap model, HttpServletRequest request, HttpSession session, HttpServletResponse response ) throws IOException, SQLException, RuntimeException { + return "redirect:/_mngr_/bat/getBatchSchdulList.do"; + } + + @RequestMapping(value = "/_mngr_/main/index.do") + public String mngrMainIndex(HttpServletRequest request, ModelMap model, HttpSession session) throws IOException, SQLException, RuntimeException { + return "redirect:/_mngr_/bat/getBatchSchdulList.do"; + } + + @RequestMapping(value = "/_mngr_/_include/mngrInclude_HEADER.do") + public String mngrInclude_HEADER(ModelMap model, HttpServletRequest request, HttpSession session) throws IOException, SQLException, RuntimeException, NoSuchAlgorithmException { + model.addAttribute("logo", "gov");//정부이미지 + return "itgcms/mngr/_include/mngrInclude_HEADER"; + } +} diff --git a/src/main/java/egovframework/itgcms/mngr/manager/web/MngrManagerController.java b/src/main/java/egovframework/itgcms/mngr/manager/web/MngrManagerController.java new file mode 100644 index 0000000..441f29b --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/manager/web/MngrManagerController.java @@ -0,0 +1,471 @@ +package egovframework.itgcms.mngr.manager.web; + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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.servlet.ModelAndView; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.common.MngrSessionVO; +import egovframework.itgcms.core.authority.service.MngrAuthorityService; +import egovframework.itgcms.core.authority.service.MngrPowerVO; +import egovframework.itgcms.core.code.service.MngrCodeService; +import egovframework.itgcms.core.code.service.MngrCodeVO; +import egovframework.itgcms.core.manager.service.MngrManagerLoginLogSearchVO; +import egovframework.itgcms.core.manager.service.MngrManagerLoginLogVO; +import egovframework.itgcms.core.manager.service.MngrManagerSearchVO; +import egovframework.itgcms.core.manager.service.MngrManagerService; +import egovframework.itgcms.core.manager.service.MngrManagerVO; +import egovframework.itgcms.core.site.service.MngrSiteService; +import egovframework.itgcms.core.site.service.MngrSiteVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.itgcms.util.ExcelDownloadView; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + + +/** + * @파일명 : MngrManagerController.java + * @파일정보 : 관리자 등록 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class MngrManagerController { + + /** MngrManagerService */ + @Resource(name = "mngrManagerService") + private MngrManagerService mngrManagerService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** mngrCodeService */ + @Resource(name = "mngrCodeService") + private MngrCodeService mngrCodeService; + + /** mngrAuthorityService */ + @Resource(name = "mngrAuthorityService") + private MngrAuthorityService mngrAuthorityService; + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + + /** MngrSiteService */ + @Resource(name = "mngrSiteService") + private MngrSiteService mngrSiteService; + + + private static final Logger logger = LogManager.getLogger(MngrManagerController.class); + + /** + * 글 목록을 조회한다. (paging) + * @param mngrManagerSearchVO - 조회할 정보가 담긴 PopopSearchVO + * @param model + * @return "itgcms/mngr/manager/_mngr_managerList" + * @exception Exception + */ + @RequestMapping(value = "/_mngr_/manager/mngrManagerList.do") + public String mngrManagerList(@ModelAttribute("searchVO") MngrManagerSearchVO mngrManagerSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + mngrManagerSearchVO.setPageUnit(Integer.parseInt(mngrManagerSearchVO.getViewCount()));//viewCount + mngrManagerSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrManagerSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrManagerSearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrManagerSearchVO.getPageSize()); + + mngrManagerSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrManagerSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrManagerSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List resultList = mngrManagerService.selectMngrManagerList(mngrManagerSearchVO); + model.addAttribute("resultList", resultList); + int totCnt = mngrManagerService.mngrManagerListTotCnt(mngrManagerSearchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); //페이지 No 의 시작 값 가상의 넘버링 + return "itgcms/mngr/manager/mngrManagerList"; + } + + @RequestMapping(value = "/_mngr_/manager/mngrManagerRegist.do") + public String mngrManagerRegist(@ModelAttribute("searchVO") MngrManagerSearchVO mngrManagerSearchVO, ModelMap model, HttpSession session) throws IOException, SQLException, RuntimeException { + mngrManagerSearchVO.setAct("REGIST"); + mngrManagerSearchVO.setIsMyInfo("N"); + MngrManagerVO managerVO = new MngrManagerVO(); + model.addAttribute("result", managerVO); + MngrCodeVO codeVO = new MngrCodeVO(); + codeVO.setSchCode("group"); //부서목록 + model.addAttribute("groupList", mngrCodeService.mngrCodeList(codeVO)); + codeVO.setSchCode("position"); //직위목록 + model.addAttribute("positionList", mngrCodeService.mngrCodeList(codeVO)); + codeVO.setSchCode("mngrAuth"); //관리자등급목록 + codeVO.setCauth("99"); + List mngrAuthList = mngrCodeService.mngrCodeList(codeVO); + MngrSessionVO mngrSessionVO = (MngrSessionVO)session.getAttribute("mngrSessionVO"); + for(int i=0; i < mngrAuthList.size(); i++){ + MngrCodeVO authCodeVO = mngrAuthList.get(i); + if(Integer.parseInt(authCodeVO.getEtc1()) > Integer.parseInt(mngrSessionVO.getMngAuth())){ + mngrAuthList.remove(i); + } + } + + model.addAttribute("mngrAuthList", mngrAuthList); + model.addAttribute("roleList", mngrAuthorityService.selectMngrRoleList()); + model.addAttribute("powerVO", (List) mngrAuthorityService.selectMngrPowerList()); + model.addAttribute("searchVO", mngrManagerSearchVO); + + return "itgcms/mngr/manager/mngrManagerRegist"; + } + + @RequestMapping(value = "/_mngr_/manager/mngrManagerCheckId.ajax") + public void mngrManagerCheckId(@ModelAttribute("searchVO") MngrManagerSearchVO mngrManagerSearchVO, ModelMap model, HttpServletResponse response, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + String result = "0"; + String message = "알수없는 오류가 발생했습니다. 다시 시도해 주세요."; + + if(!"".equals(CommUtil.isNull(mngrManagerSearchVO.getId(), ""))){ + ItgMap licenseVO = CommUtil.getSystemLicenseVO(request, "license"); + String lId = CommUtil.seedDec256(CommUtil.isNull(licenseVO.getValue(0),"")); + int resultCount = mngrManagerService.mngrManagerCheckId(mngrManagerSearchVO); + if (lId.equals(mngrManagerSearchVO.getId())) { + resultCount = 1; + } + if(resultCount > 0 ){ + result = "2"; + message = "중복된 아이디 입니다."; + }else{ + result = "1"; + message = "사용 가능한 아이디 입니다."; + } + } + String json = "{\"result\" : "+result+", \"message\" : \""+message+"\"}"; + CommUtil.printWriter(json, response); + } + + @RequestMapping(value = "/_mngr_/manager/mngrManagerView.do") + public String mngrManagerView(@ModelAttribute("searchVO") MngrManagerSearchVO mngrManagerSearchVO, ModelMap model, HttpSession session) throws IOException, SQLException, RuntimeException { + mngrManagerSearchVO.setAct("UPDATE"); + if(mngrManagerSearchVO.getIsMyInfo()==""){ + mngrManagerSearchVO.setIsMyInfo("Y"); + } + MngrCodeVO codeVO = new MngrCodeVO(); + codeVO.setSchCode("group"); //부서목록 + model.addAttribute("groupList", mngrCodeService.mngrCodeList(codeVO)); + codeVO.setSchCode("position"); //직위목록 + model.addAttribute("positionList", mngrCodeService.mngrCodeList(codeVO)); + codeVO.setSchCode("mngrAuth"); //관리자등급목록 + codeVO.setCauth("99"); + List mngrAuthList = mngrCodeService.mngrCodeList(codeVO); + MngrSessionVO mngrSessionVO = (MngrSessionVO)session.getAttribute("mngrSessionVO"); + for(int i=0; i < mngrAuthList.size(); i++){ + MngrCodeVO authCodeVO = mngrAuthList.get(i); + if(Integer.parseInt(authCodeVO.getEtc1()) > Integer.parseInt(mngrSessionVO.getMngAuth())){ + mngrAuthList.remove(i); + } + } + model.addAttribute("mngrAuthList", mngrAuthList); + model.addAttribute("roleList", mngrAuthorityService.selectMngrRoleList()); + model.addAttribute("powerVO", (List) mngrAuthorityService.selectMngrPowerList()); + model.addAttribute("result", mngrManagerService.mngrManagerView(mngrManagerSearchVO)); + model.addAttribute("searchVO", mngrManagerSearchVO); + + return "itgcms/mngr/manager/mngrManagerRegist"; + } + + @RequestMapping(value = "/_mngr_/manager/mngrManagerRegistProc.do") + public String mngrManagerRegistProc(@ModelAttribute("searchVO") MngrManagerSearchVO mngrManagerSearchVO, ModelMap model, MngrManagerVO managerVO, HttpServletRequest request) throws IOException, SQLException, RuntimeException, NoSuchAlgorithmException { + + + //입력 값 유효 체크 + // 아이디, 이름, 비밀번호, 비밀번호확인, 이메일, 부서 + if("".equals( CommUtil.isNull( managerVO.getMngId() , "") )) return CommUtil.doComplete(model, "오류", "아이디를 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( managerVO.getMngPass() , "") )) return CommUtil.doComplete(model, "오류", "비밀번호를 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( managerVO.getMngPass2() , "") )) return CommUtil.doComplete(model, "오류", "비밀번호 확인을 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( managerVO.getMngEmail() , "") )) return CommUtil.doComplete(model, "오류", "이메일주소를 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( managerVO.getGroupCode() , "") )) return CommUtil.doComplete(model, "오류", "부서를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( managerVO.getMngWork() , "") )) return CommUtil.doComplete(model, "오류", "담당업무를 입력 해 주세요.", "history.back();"); + + // 메뉴권한이 0(직접선택)인 경우 메뉴선택한 갯수 확인 + if("0".equals(CommUtil.isNull( managerVO.getAuthIdx(), "" )) && "".equals( CommUtil.isNull( managerVO.getMenuCodes(), "" ) )) return CommUtil.doComplete(model, "오류", "메뉴권한의 메뉴를 선택 해 주세요.", "history.back();"); + + //아이디 첫글자 영문 체크 + if(!CommUtil.regEx("^[a-zA-Z]", managerVO.getMngId())) return CommUtil.doComplete(model, "오류", "아이디 첫글자는 영문자로 입력 해 주세요.", "history.back();"); + if(CommUtil.regEx("[^a-zA-Z0-9_]", managerVO.getMngId())) return CommUtil.doComplete(model, "오류", "아이디는 영문, 숫자, _ 만 입력 가능합니다.", "history.back();"); + if(managerVO.getMngId().length() < 4 || managerVO.getMngId().length() > 12) return CommUtil.doComplete(model, "오류", "아이디는 4 ~ 12자 이내로 입력 해 주세요.", "history.back();"); + + //아이디 중복 검사 + mngrManagerSearchVO.setId(managerVO.getMngId()); + int resultCount = mngrManagerService.mngrManagerCheckId(mngrManagerSearchVO); + + ItgMap licenseVO = CommUtil.getSystemLicenseVO(request, "license"); + String lId = CommUtil.seedDec256(CommUtil.isNull(licenseVO.getValue(0),"")); + if (lId.equals(mngrManagerSearchVO.getId())) { + resultCount = 1; + } + if(resultCount > 0) return CommUtil.doComplete(model, "오류", "중복된 아이디 입니다. 확인 후 다시 시도하세요." , "history.back();"); + + //비밀번호 체크 + if(!managerVO.getMngPass().equals(managerVO.getMngPass2())) return CommUtil.doComplete(model, "오류", "비밀번호와 비밀번호 확인이 일치하지 않습니다.", "history.back();"); + String spStr = "[*+$|?()_{}\\^\\[\\]!#%&@`:;\\-=.<>,~'\"\\\\|]"; + if(!(CommUtil.regEx("[0-9]", managerVO.getMngPass()) && CommUtil.regEx("[a-zA-Z]", managerVO.getMngPass2()) &&CommUtil.regEx(spStr, managerVO.getMngPass()) && managerVO.getMngPass2().length() >=9)) return CommUtil.doComplete(model, "오류", "비밀번호는 영문, 숫자, 특수문자 조합으로 9자 이상 입력 해 주세요.", "history.back();"); + + //이메일 형식 + if(!CommUtil.isEmail( managerVO.getMngEmail())) return CommUtil.doComplete(model, "오류", "올바른 이메일 형식이 아닙니다. 확인 후 다시 시도해주세요.", "history.back();"); + + //비밀번호 암호화 + //managerVO.setMngPass(CommUtil.getPass(managerVO.getMngPass())); + managerVO.setMngPass(CommUtil.hexSha256(managerVO.getMngPass())); + + managerVO.setRegmemid(CommUtil.getMngrMemId()); + mngrManagerService.mngrManagerRegistProc(managerVO); + + return CommUtil.doComplete(model, "완료", "등록 되었습니다.", "location.href='mngrManagerList.do?"+mngrManagerSearchVO.getQuery()+"'"); + } + + @RequestMapping(value = "/_mngr_/manager/mngrManagerUpdateProc.do") + public String mngrManagerUpdateProc(@ModelAttribute("searchVO") MngrManagerSearchVO mngrManagerSearchVO, ModelMap model, MngrManagerVO managerVO) throws IOException, SQLException, RuntimeException, NoSuchAlgorithmException { + + //입력 값 유효 체크 + // 이메일, 부서 + if("".equals( CommUtil.isNull( managerVO.getMngEmail() , "") )) return CommUtil.doComplete(model, "오류", "이메일주소를 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( managerVO.getGroupCode() , "") )) return CommUtil.doComplete(model, "오류", "부서를 선택 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( managerVO.getMngWork() , "") )) return CommUtil.doComplete(model, "오류", "담당업무를 입력 해 주세요.", "history.back();"); + + //컨텐츠권한이 0(직접선택)인 경우 메뉴선택한 갯수 확인 + if ("N".equals(mngrManagerSearchVO.getIsMyInfo())) { + if("0".equals(CommUtil.isNull( managerVO.getAuthIdx(), "" )) && "".equals( CommUtil.isNull( managerVO.getMenuCodes(), "" ) )) return CommUtil.doComplete(model, "오류", "컨텐츠권한의 메뉴를 선택 해 주세요.", "history.back();"); + } + + + //비밀번호 체크 + if(!"".equals( managerVO.getMngPass())){ + if(!managerVO.getMngPass().equals(managerVO.getMngPass2())) return CommUtil.doComplete(model, "오류", "비밀번호와 비밀번호 확인이 일치하지 않습니다.", "history.back();"); + String spStr = "[*+$|?()_{}\\^\\[\\]!#%&@`:;\\-=.<>,~'\"\\\\|]"; + if(!(CommUtil.regEx("[0-9]", managerVO.getMngPass()) && CommUtil.regEx("[a-zA-Z]", managerVO.getMngPass2()) &&CommUtil.regEx(spStr, managerVO.getMngPass()) && managerVO.getMngPass2().length() >=9)) return CommUtil.doComplete(model, "오류", "비밀번호는 영문, 숫자, 특수문자 조합으로 9자 이상 입력 해 주세요.", "history.back();"); + + //비밀번호 암호화 + //managerVO.setMngPass(CommUtil.getPass(managerVO.getMngPass())); + managerVO.setMngPass(CommUtil.hexSha256(managerVO.getMngPass())); + } + managerVO.setUpdmemid(CommUtil.getMngrMemId()); + mngrManagerService.updateMngrManagerUpdateProc(managerVO); + + return CommUtil.doComplete(model, "완료", "수정 되었습니다.", "location.href='mngrManagerView.do?"+mngrManagerSearchVO.getQuery()+"'"); + + } + + + + @RequestMapping(value = "/_mngr_/manager/mngrManagerDelProc.do") + public String mngrManagerDelProc(@ModelAttribute("searchVO") MngrManagerSearchVO mngrManagerSearchVO, ModelMap model, MngrManagerVO managerVO) throws IOException, SQLException, RuntimeException { + managerVO.setDelmemid(CommUtil.getMngrMemId()); + mngrManagerService.mngrManagerDelProc(managerVO); + return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='mngrManagerList.do?"+mngrManagerSearchVO.getQuery()+"'"); + + } + + + @RequestMapping(value = "/_mngr_/manager/mngrManagerChkDelProc.do") + public String mngrManagerChkDelProc(@ModelAttribute("searchVO") MngrManagerSearchVO mngrManagerSearchVO, ModelMap model, MngrManagerVO managerVO, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + managerVO.setDelmemid(CommUtil.getMngrMemId()); + mngrManagerService.mngrManagerChkDelProc(managerVO); + return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='mngrManagerList.do?"+mngrManagerSearchVO.getQuery()+"'"); + } + + @RequestMapping(value = "/_mngr_/manager/mngrManagerInitPass.do") + public String mngrManagerInitPass(@ModelAttribute("searchVO") MngrManagerSearchVO mngrManagerSearchVO, ModelMap model, MngrManagerVO managerVO) throws IOException, SQLException, RuntimeException, NoSuchAlgorithmException { + managerVO.setUpdmemid(CommUtil.getMngrMemId()); + managerVO.setMngPass(CommUtil.hexSha256(managerVO.getId())); + mngrManagerService.mngrManagerInitPass(managerVO); + return CommUtil.doComplete(model, "완료", "비밀번호가 초기화 되었습니다.", "location.href='mngrManagerView.do?"+mngrManagerSearchVO.getQuery()+"'"); + + } + + @RequestMapping(value = "/_mngr_/manager/mngrManagerListAjax.ajax") + public void mngrManagerListAjax(@ModelAttribute("searchVO") MngrManagerSearchVO mngrManagerSearchVO, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + + mngrManagerSearchVO.setPageUnit(10);//viewCount + mngrManagerSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrManagerSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrManagerSearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrManagerSearchVO.getPageSize()); + + mngrManagerSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrManagerSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrManagerSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List result = mngrManagerService.mMngrManagerList(mngrManagerSearchVO); + int totCnt = mngrManagerService.mngrManagerListTotCnt(mngrManagerSearchVO); + paginationInfo.setTotalRecordCount(totCnt); + + String json = "{\"total\":\""+paginationInfo.getTotalRecordCount()+"\",\"currentPage\":\""+paginationInfo.getCurrentPageNo()+"\", \"totalPage\":\""+paginationInfo.getTotalPageCount()+"\",\"result\": ["; + for(int i = 0; i < result.size(); i++){ + MngrManagerVO manager = (MngrManagerVO)result.get(i); + json += String.format("{\"mngId\":\"%s\",\"mngName\":\"%s\",\"groupCodeName\":\"%s\",\"authIdx\":\"%s\",\"authIdxName\":\"%s\",\"mngPower\":\"%s\"}", + manager.getMngId(), + manager.getMngName(), + manager.getGroupCodeName(), + manager.getAuthIdx(), + manager.getAuthIdxName(), + manager.getMngPower() + ); + if(i < result.size() - 1){ + json += ","; + } + + } + json += "]}"; + CommUtil.printWriter(json, response); + } + + @RequestMapping(value = "/_mngr_/manager/mngrManagerAuthListAjax.do") + public ModelAndView mngrManagerAuthListAjax(HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String authIdx = CommUtil.isNull(request.getParameter("authIdx"), ""); + List result = mngrManagerService.mngrManagerAuthListAjax(authIdx); + HashMap hm = new HashMap(); + hm.put("result", result); + return new ModelAndView("jsonView", hm); + } + + @RequestMapping(value = "/_mngr_/manager/mngrManagerAuthPowerListAjax.do") + public ModelAndView mngrManagerAuthPowerListAjax(HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String powerIdx = CommUtil.isNull(request.getParameter("powerIdx"), ""); + List result = mngrManagerService.mngrManagerAuthPowerListAjax(powerIdx); + HashMap hm = new HashMap(); + hm.put("result", result); + return new ModelAndView("jsonView", hm); + } + + private HashMap getConfig(String type) throws IOException, SQLException, RuntimeException { + HashMap hm = CommUtil.getConfigFromXml("manager", type); + if(hm == null) throw new RuntimeException("관리자 type 오류"); + return hm; + } + + //* ########### 로그인 로그 ########### */ + @RequestMapping(value = "/_mngr_/manager/mngrManagerLoginLogList.do") + public String mngrManagerLoginLogList(@ModelAttribute("searchVO") MngrManagerLoginLogSearchVO mngrManagerLoginLogSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + //기본 검색기간 시작일,종료일 설정 + if("".equals( CommUtil.isNull( mngrManagerLoginLogSearchVO.getSchSdt() , "" ) )){ + mngrManagerLoginLogSearchVO.setSchSdt(CommUtil.getDatePattern("yyyy-MM-") + "01"); + } + if("".equals( CommUtil.isNull( mngrManagerLoginLogSearchVO.getSchEdt() , "" ) )){ + mngrManagerLoginLogSearchVO.setSchEdt(CommUtil.getDatePattern("yyyy-MM-dd")); + } + + mngrManagerLoginLogSearchVO.setPageUnit(Integer.parseInt(mngrManagerLoginLogSearchVO.getViewCount()));//viewCount + mngrManagerLoginLogSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrManagerLoginLogSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrManagerLoginLogSearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrManagerLoginLogSearchVO.getPageSize()); + + mngrManagerLoginLogSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrManagerLoginLogSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrManagerLoginLogSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List result = mngrManagerService.mngrManagerLoginLogList(mngrManagerLoginLogSearchVO); + model.addAttribute("resultList", result); + int totCnt = mngrManagerService.mngrManagerLoginLogListTotCnt(mngrManagerLoginLogSearchVO); + paginationInfo.setTotalRecordCount(totCnt); + + List siteList = mngrSiteService.mngrSiteList(); + + model.addAttribute("siteList", siteList); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); //페이지 No 의 시작 값 가상의 넘버링 + return "itgcms/mngr/manager/mngrManagerLoginLogList"; + } + + @RequestMapping(value = "/_mngr_/manager/mngrManagerLoginLogAjax.do") + public ModelAndView mngrManagerLoginLogAjax(HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String log_id = CommUtil.isNull(request.getParameter("log_id"), ""); + List result = mngrManagerService.mngrManagerLoginLogAjax(log_id); + HashMap hm = new HashMap(); + hm.put("result", result); + return new ModelAndView("jsonView", hm); + } + + @RequestMapping(value="/_mngr_/manager/mngrManagerLoginLogListExcel.do") + public ModelAndView mngrManagerLoginLogListExcel(@ModelAttribute("searchVO") MngrManagerLoginLogSearchVO mngrManagerLoginLogSearchVO, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + + ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); + + mngrManagerLoginLogSearchVO.setPageUnit(Integer.parseInt(mngrManagerLoginLogSearchVO.getViewCount()));//viewCount + mngrManagerLoginLogSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrManagerLoginLogSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrManagerLoginLogSearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrManagerLoginLogSearchVO.getPageSize()); + + mngrManagerLoginLogSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrManagerLoginLogSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrManagerLoginLogSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + mngrManagerLoginLogSearchVO.setExcelDown("excel"); + + List resultList = mngrManagerService.mngrManagerLoginLogList(mngrManagerLoginLogSearchVO); + + HashMap paramMap = new HashMap(); + + //페이징 제외 + + paramMap.put("schSdt", mngrManagerLoginLogSearchVO.getSchSdt()); + paramMap.put("schEdt", mngrManagerLoginLogSearchVO.getSchEdt()); + paramMap.put("resultList", resultList); + + //엑셀 템플릿에 넘겨줄 데이타 + mav.addObject("data", paramMap); + + //다운로드에 사용되어질 엑셀파일 템플릿 + mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, CommUtil.getExcelTemplateName(request, "mngr")); + //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) + mav.addObject(ExcelDownloadView.DOWN_FILE_NM, "회원로그인로그-" + CommUtil.getDatePattern("yyyy-MM-dd")); + + return mav; + + } + + @RequestMapping(value = "/_mngr_/manager/mngrManagerLoginLogDel.do") + public String mngrManagerLoginLogDel(@ModelAttribute("searchVO") MngrManagerLoginLogSearchVO mngrManagerLoginLogSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + mngrManagerService.mngrManagerLoginLogDelProc(mngrManagerLoginLogSearchVO); + return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='mngrManagerLoginLogList.do'"); + } + +} diff --git a/src/main/java/egovframework/itgcms/mngr/managerlog/web/MngrManagerLogController.java b/src/main/java/egovframework/itgcms/mngr/managerlog/web/MngrManagerLogController.java new file mode 100644 index 0000000..987a46d --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/managerlog/web/MngrManagerLogController.java @@ -0,0 +1,142 @@ +package egovframework.itgcms.mngr.managerlog.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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.servlet.ModelAndView; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.itgcms.core.managerlog.service.MngrManagerLogSearchVO; +import egovframework.itgcms.core.managerlog.service.MngrManagerLogService; +import egovframework.itgcms.util.CommUtil; +import egovframework.itgcms.util.ExcelDownloadView; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + + +/** + * @파일명 : MngrManagerLogController.java + * @파일정보 : 관리자 로그 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class MngrManagerLogController { + + /** MngrManagerService */ + @Resource(name = "mngrManagerLogService") + private MngrManagerLogService mngrManagerLogService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + + + private static final Logger logger = LogManager.getLogger(MngrManagerLogController.class); + + @RequestMapping(value = "/_mngr_/managerlog/mngrManagerLogList.do") + public String mngrManagerLogList(@ModelAttribute("searchVO") MngrManagerLogSearchVO mngrManagerLogSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + + //기본 검색기간 시작일,종료일 설정 + if("".equals( CommUtil.isNull( mngrManagerLogSearchVO.getSchSdt() , "" ) )){ + mngrManagerLogSearchVO.setSchSdt(CommUtil.getDatePattern("yyyy-MM-") + "01"); + } + if("".equals( CommUtil.isNull( mngrManagerLogSearchVO.getSchEdt() , "" ) )){ + mngrManagerLogSearchVO.setSchEdt(CommUtil.getDatePattern("yyyy-MM-dd")); + } + + mngrManagerLogSearchVO.setPageUnit(Integer.parseInt(mngrManagerLogSearchVO.getViewCount()));//viewCount + mngrManagerLogSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrManagerLogSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrManagerLogSearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrManagerLogSearchVO.getPageSize()); + + mngrManagerLogSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrManagerLogSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrManagerLogSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List resultList = mngrManagerLogService.mngrManagerLogList(mngrManagerLogSearchVO); + model.addAttribute("resultList", resultList); + int totCnt = mngrManagerLogService.mngrManagerLogListTotCnt(mngrManagerLogSearchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); //페이지 No 의 시작 값 가상의 넘버링 + return "itgcms/mngr/managerlog/mngrManagerLogList"; + } + + + @RequestMapping(value="/_mngr_/managerlog/mngrManagerLogListExcel.do") + public ModelAndView mngrManagerLogListExcel(@ModelAttribute("searchVO") MngrManagerLogSearchVO mngrManagerLogSearchVO, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + + ModelAndView mav = new ModelAndView(ExcelDownloadView.EXCEL_DOWN); + + mngrManagerLogSearchVO.setPageUnit(Integer.parseInt(mngrManagerLogSearchVO.getViewCount()));//viewCount + mngrManagerLogSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrManagerLogSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrManagerLogSearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrManagerLogSearchVO.getPageSize()); + + mngrManagerLogSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrManagerLogSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrManagerLogSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + mngrManagerLogSearchVO.setExcelDown("excel"); + + List resultList = mngrManagerLogService.mngrManagerLogList(mngrManagerLogSearchVO); + + HashMap paramMap = new HashMap(); + + //페이징 제외 + + paramMap.put("schSdt", mngrManagerLogSearchVO.getSchSdt()); + paramMap.put("schEdt", mngrManagerLogSearchVO.getSchEdt()); + paramMap.put("resultList", resultList); + + //엑셀 템플릿에 넘겨줄 데이타 + mav.addObject("data", paramMap); + + //다운로드에 사용되어질 엑셀파일 템플릿 + mav.addObject(ExcelDownloadView.DOWN_EXCEL_TEMPLATE, CommUtil.getExcelTemplateName(request, "mngr")); + //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) + mav.addObject(ExcelDownloadView.DOWN_FILE_NM, "관리자로그-" + CommUtil.getDatePattern("yyyy-MM-dd")); + + return mav; + + } + + @RequestMapping(value = "/_mngr_/managerlog/mngrManagerLogDel.do") + public String mngrManagerLogDel(@ModelAttribute("searchVO") MngrManagerLogSearchVO mngrManagerSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + mngrManagerLogService.mngrManagerLogDelProc(mngrManagerSearchVO); + return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='mngrManagerLogList.do'"); + } +} diff --git a/src/main/java/egovframework/itgcms/mngr/member/web/MngrMemIPManagementController.java b/src/main/java/egovframework/itgcms/mngr/member/web/MngrMemIPManagementController.java new file mode 100644 index 0000000..3dc4e2a --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/member/web/MngrMemIPManagementController.java @@ -0,0 +1,73 @@ +package egovframework.itgcms.mngr.member.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +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.ResponseBody; + +import egovframework.itgcms.common.MngrSessionVO; +import egovframework.itgcms.core.menu.service.MngrMemIPManageService; +import egovframework.itgcms.core.menu.service.MngrMemIpManageVO; + +/** + * @파일명 : MngrMemIPManagementController.java + * @파일정보 : 회원 IP 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @ho 2017. 5. 25. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +@RequestMapping("/_mngr_/memIP/*") +public class MngrMemIPManagementController { + + @Resource(name="mngrMemIPManageService") + private MngrMemIPManageService mngrMemIPManageService; + + @RequestMapping(value = "/ipManageMain.do") + public String mngrIPManageMain(HttpServletRequest request, ModelMap model) throws IOException, SQLException, RuntimeException { + model.addAttribute("resultList", mngrMemIPManageService.mngrSiteListForIPManage(null)); + return "itgcms/mngr/member/ipManage"; + } + + @RequestMapping(value = "/ipManageProc.ajax", method=RequestMethod.POST) + @ResponseBody + public Map mngrIPManageProc(@ModelAttribute("searchVO") MngrMemIpManageVO searchVO, HttpSession session){ + + Map result = new HashMap<>(); + result.put("status", "error unknown"); + result.put("msg", "알수 없는 오류가 발생하였습니다. /n창을 새로고침한 후 다시 시도해 주세요."); + + MngrSessionVO mngrSessionVo = (MngrSessionVO)session.getAttribute("mngrSessionVO"); + String mngrId = mngrSessionVo.getId(); + + searchVO.setUpdMemId(mngrId); + if(mngrMemIPManageService.mngrUpdateIPManage(searchVO)>0){ + result.put("msg", "성공적으로 수정하였습니다."); + } else { + searchVO.setRegMemId(mngrId); + mngrMemIPManageService.mngrInsertIPManage(searchVO); + result.put("msg", "성공적으로 작성하였습니다."); + } + + result.put("status", "success"); + + return result; + } +} diff --git a/src/main/java/egovframework/itgcms/mngr/member/web/del_MngrMemLoginConfigController.java b/src/main/java/egovframework/itgcms/mngr/member/web/del_MngrMemLoginConfigController.java new file mode 100644 index 0000000..d21a54a --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/member/web/del_MngrMemLoginConfigController.java @@ -0,0 +1,111 @@ +package egovframework.itgcms.mngr.member.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springmodules.validation.commons.DefaultBeanValidator; + +//import egovframework.itgcms.core.systemconfig.service.SystemconfigVO; +import egovframework.itgcms.util.CommUtil; + +/** + * @파일명 : MngrMemLoginConfigController.java + * @파일정보 : 회원 로그인 설정 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2017. 5. 15. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +@RequestMapping("/_mngr_/loginconfig/*") +public class del_MngrMemLoginConfigController { + + /** Validator */ +// @Resource(name = "beanValidator") +// protected DefaultBeanValidator beanValidator; +// +// @RequestMapping(value = "/loginConfigMain.do") +// public String mngrLoginConfigMain(@RequestParam(value="siteCode", required=false) String siteCode, HttpServletRequest request, ModelMap model) throws IOException, SQLException, RuntimeException { +// siteCode = CommUtil.isNull(siteCode, "web"); +// +// SystemconfigVO sysConf = CommUtil.getSystemconfigVO(request, "systemconfig"+siteCode); +// +// Map resultMap = new HashMap(); +// +// resultMap.put("sessionTime", String.valueOf(sysConf.getMemSessionTime() >= 300 && sysConf.getMemSessionTime() <= 600 ? sysConf.getMemSessionTime() : 600 )); +// resultMap.put("returnType", String.valueOf(sysConf.getLoginRtType())); +// resultMap.put("returnMenu", String.valueOf(sysConf.getLoginRtMeunCode())); +// +// model.addAttribute("siteCode", siteCode); +// model.addAllAttributes(resultMap); +// +// return "itgcms/mngr/member/memberLoginConfig"; +// } +// +// +// @RequestMapping(value = "/mngrLoginConfigProc", method=RequestMethod.POST) +// @ResponseBody +// public Map mngrLoginConfigProc (@RequestParam(value="siteCode", required=false) String siteCode, +// @RequestParam(value="sessionTime", required=false) int sessionTime, @RequestParam(value="returnType", required=false) int returnType, +// @RequestParam(value="menuCode", required=false) String menuCode, HttpServletRequest request) { +// +// Map result = new HashMap<>(); +// result.put("status", "error_Start"); +// result.put("msg", "알 수 없는 오류가 발생하였습니다. \n창을 새로고침한 후 다시 시도하십시오."); +// +// if (siteCode == null || "".equals(siteCode)) { +// result.put("status", "error_SiteCode Empty"); +// return result; +// } +// +// if (sessionTime< 300 || sessionTime > 600) { +// result.put("status", "error_SessionTime Over"); +// result.put("msg", "로그인 유효 시간이 300~600 사이 값이 아닙니다."); +// return result; +// } +// +// switch (returnType) { +// case 0: +// case 1: +// break; +// case 2: +// if (menuCode == null || "".equals(menuCode)) { +// result.put("status", "error_menuCode Empty"); +// result.put("msg", "리턴할 메뉴를 선택하셔야합니다."); +// return result; +// } +// break; +// default: +// result.put("status", "error_returnType Over"); +// return result; +// } +// +// SystemconfigVO sysConf = CommUtil.getSystemconfigVO(request, "systemconfig"+siteCode); +// sysConf.setMemSessionTime(sessionTime); +// sysConf.setLoginRtType(returnType); +// if (returnType==2) { +// sysConf.setLoginRtMeunCode(menuCode); +// } +// result.put("status", "success"); +// result.put("msg", "성공적으로 수정하였습니다."); +// CommUtil.setFileObject(request, sysConf, "systemconfig"+siteCode); +// +// return result; +// } +} diff --git a/src/main/java/egovframework/itgcms/mngr/member/web/del_MngrMemberController.java b/src/main/java/egovframework/itgcms/mngr/member/web/del_MngrMemberController.java new file mode 100644 index 0000000..179d0a7 --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/member/web/del_MngrMemberController.java @@ -0,0 +1,394 @@ +package egovframework.itgcms.mngr.member.web; + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +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.ResponseBody; + +//import egovframework.com.cmm.service.IpCountryService; +//import egovframework.com.cmm.service.IpCountryVO; +//import egovframework.itgcms.common.ItgMap; +//import egovframework.itgcms.core.code.service.MngrCodeService; +//import egovframework.itgcms.core.code.service.MngrCodeVO; +//import egovframework.itgcms.core.joinformconfig.service.MngrJoinFormConfigSearchVO; +//import egovframework.itgcms.core.joinformconfig.service.MngrJoinFormConfigService; +//import egovframework.itgcms.core.manager.service.MngrManagerService; +//import egovframework.itgcms.core.member.service.MemberService; +//import egovframework.itgcms.core.member.service.MemberVO; +//import egovframework.itgcms.core.member.service.MngrMemberExcelView; +//import egovframework.itgcms.util.CommUtil; +//import egovframework.rte.psl.dataaccess.util.EgovMap; +//import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +//import net.sf.uadetector.ReadableUserAgent; +//import net.sf.uadetector.UserAgentStringParser; +//import net.sf.uadetector.service.UADetectorServiceFactory; + +/** + * @파일명 : MngrMemberController.java + * @파일정보 : 회원 등록 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class del_MngrMemberController { + +// /** MemberService */ +// @Resource(name = "memberService") +// private MemberService memberService; +// +// @Resource(name = "ipCountryService") +// private IpCountryService ipCountryService; +// +// @Resource(name = "mngrMemberExcelView") +// private MngrMemberExcelView mngrMemberExcelView; +// +// /** MngrManagerService */ +// @Resource(name = "mngrManagerService") +// private MngrManagerService mngrManagerService; +// +// @Resource(name="mngrCodeService") +// private MngrCodeService mngrCodeService; +// +// @Resource(name="joinFormConfigService") +// private MngrJoinFormConfigService joinFormConfigService; +// +// @Autowired +// private HttpServletRequest request; +// +// private static final Logger logger = LogManager.getLogger(MngrMemberController.class); +// +// /** +// * 회원 리스트 +// * @param searchVO +// * @param model +// * @return +// * @throws IOException, SQLException, RuntimeException +// */ +// @RequestMapping(value = "/_mngr_/member/mngrMemberList.do") +// public String mngrMemberList(@ModelAttribute("searchVO") MemberVO searchVO, ModelMap model) throws IOException, SQLException, RuntimeException { +// +// searchVO.setPageUnit(Integer.parseInt(searchVO.getViewCount())); +// searchVO.setPageSize(10); +// +// int page = Integer.parseInt(searchVO.getPage()); +// +// PaginationInfo paginationInfo = new PaginationInfo(); +// paginationInfo.setCurrentPageNo(page); +// paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); +// paginationInfo.setPageSize(searchVO.getPageSize()); +// +// searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); +// searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); +// searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); +// +// List resultList = memberService.selectMemberList(searchVO); +// +// int totCnt = memberService.mSelectMemberListTotCnt(searchVO); +// paginationInfo.setTotalRecordCount(totCnt); +// +// model.addAttribute("resultList", resultList); +// model.addAttribute("paginationInfo", paginationInfo); +// model.addAttribute("listNo", (totCnt - ((page - 1) * paginationInfo.getRecordCountPerPage()))); +// +// return "itgcms/mngr/member/mngrMemberList"; +// } +// +// /** +// * 회원등록 +// * @param searchVO +// * @param model +// * @return +// * @throws IOException, SQLException, RuntimeException +// */ +// @RequestMapping(value = "/_mngr_/member/mngrMemberRegist.do", method = RequestMethod.GET) +// public String mngrMemberRegist(@ModelAttribute("searchVO") MemberVO searchVO, ModelMap model) throws IOException, SQLException, RuntimeException { +// searchVO.setAct("REGIST"); +// model.addAttribute("result", new MemberVO()); +// +// MngrCodeVO mngrCodeVO = new MngrCodeVO(); +// /* 방진회용 코드 S*/ +// mngrCodeVO.setSchCode("career1"); +// model.addAttribute("career1", mngrCodeService.mngrCodeList(mngrCodeVO)); +// +// mngrCodeVO.setSchCode("career2"); +// model.addAttribute("career2", mngrCodeService.mngrCodeList(mngrCodeVO)); +// /* 방진회용 코드 E*/ +// +// return "itgcms/mngr/member/mngrMemberRegist"; +// } +// +// /** +// * 회원등록 처리 +// * @param memberVO +// * @param model +// * @return +// * @throws NoSuchAlgorithmException +// */ +// @RequestMapping(value = "/_mngr_/member/mngrMemberRegistProc.do", method = RequestMethod.POST) +// public String mngrMemberRegistProc(@ModelAttribute("memberVO") MemberVO memberVO, ModelMap model){ +// +// // 아이디, 이름, 비밀번호, 비밀번호확인, 이메일, 부서 +// if ("".equals(CommUtil.isNull(memberVO.getId(), ""))) +// return CommUtil.doComplete(model, "오류", "아이디를 입력 해 주세요.", "history.back();"); +// if ("".equals(CommUtil.isNull(memberVO.getPass(), ""))) +// return CommUtil.doComplete(model, "오류", "비밀번호를 입력 해 주세요.", "history.back();"); +// if ("".equals(CommUtil.isNull(memberVO.getPass2(), ""))) +// return CommUtil.doComplete(model, "오류", "비밀번호 확인을 입력 해 주세요.", "history.back();"); +// if ("".equals(CommUtil.isNull(memberVO.getEmail(), ""))) +// return CommUtil.doComplete(model, "오류", "이메일주소를 입력 해 주세요.", "history.back();"); +// +// //아이디 첫글자 영문 체크 +// if (!CommUtil.regEx("^[a-zA-Z]", memberVO.getId())) +// return CommUtil.doComplete(model, "오류", "아이디 첫글자는 영문자로 입력 해 주세요.", "history.back();"); +// if (CommUtil.regEx("[^a-zA-Z0-9_]", memberVO.getId())) +// return CommUtil.doComplete(model, "오류", "아이디는 영문, 숫자, _ 만 입력 가능합니다.", "history.back();"); +// if (memberVO.getId().length() < 4 || memberVO.getId().length() > 12) +// return CommUtil.doComplete(model, "오류", "아이디는 4 ~ 12자 이내로 입력 해 주세요.", "history.back();"); +// +// //아이디 중복 검사 +// MemberVO checkIdVO = new MemberVO(); +// checkIdVO.setId(memberVO.getId()); +// int resultIdCount = memberService.mSelectMemberCnt(checkIdVO); +// if (resultIdCount > 0) +// return CommUtil.doComplete(model, "오류", "중복된 아이디 입니다. 확인 후 다시 시도하세요.", "history.back();"); +// +// //닉네임 유효성 검사 +// String result = memberService.selectMemberNickNameValidCheck(memberVO, model, 0); +// if (result != null) { +// return result; +// } +// +// //비밀번호 체크 +// if (!(CommUtil.regEx("[0-9]", memberVO.getPass()) && +// CommUtil.regEx("[a-zA-Z]", memberVO.getPass2()) && +// memberVO.getPass().length() >= 8)) +// return CommUtil.doComplete(model, "오류", "비밀번호는 영문 + 숫자 조합으로 8자 이상 입력 해 주세요.", "history.back();"); +// +// if (!memberVO.getPass().equals(memberVO.getPass2())) +// return CommUtil.doComplete(model, "오류", "비밀번호와 비밀번호 확인이 일치하지 않습니다.", "history.back();"); +// +// +// //이메일 형식 +// if (!CommUtil.isEmail(memberVO.getEmail())) +// return CommUtil.doComplete(model, "오류", "올바른 이메일 형식이 아닙니다. 확인 후 다시 시도해주세요.", "history.back();"); +// +// String ip = request.getRemoteAddr(); +// IpCountryVO ipCountryVO = ipCountryService.getCountryNameAndCode(ip); +// memberVO.setRegIp(ip); +// memberVO.setRegCountryCd(ipCountryVO.getCountryCode()); +// memberVO.setRegCountryName(ipCountryVO.getCountryName()); +// +// UserAgentStringParser parser = UADetectorServiceFactory.getResourceModuleParser(); +// ReadableUserAgent uai = parser.parse(request.getHeader("User-Agent")); +// memberVO.setRegBrowser(uai.getName()); +// memberVO.setRegBrowserIcon(uai.getIcon()); +// memberVO.setRegOs(uai.getOperatingSystem().getName()); +// memberVO.setRegOsIcon(uai.getOperatingSystem().getIcon()); +// +// //비밀번호 암호화 +//// memberVO.setPass(CommUtil.getPass(memberVO.getPass())); +// try { +// memberVO.setPass(CommUtil.hexSha256(memberVO.getPass())); +// }catch(NoSuchAlgorithmException e1){ +// logger.error("예외 상황 발생"); +// }catch(IOException e2){ +// logger.error("예외 상황 발생"); +// } +// memberVO.setRegId(CommUtil.getMngrMemId()); +// memberService.insertMemberRegist(memberVO); +// +// return CommUtil.doComplete(model, "완료", "등록 되었습니다.", "location.href='mngrMemberList.do?" + memberVO.getQuery() + "'"); +// } +// +// /** +// * 회원정보 수정 +// * @param memberVO +// * @param model +// * @return +// */ +// @RequestMapping(value = "/_mngr_/member/mngrMemberUpdateProc.do") +// public String mngrMemberUpdateProc(@ModelAttribute("memberVO") MemberVO memberVO, ModelMap model) { +// if ("".equals(CommUtil.isNull(memberVO.getEmail(), ""))) +// return CommUtil.doComplete(model, "오류", "이메일주소를 입력 해 주세요.", "history.back();"); +// +// if (!CommUtil.isEmail(memberVO.getEmail())) +// return CommUtil.doComplete(model, "오류", "올바른 이메일 형식이 아닙니다. 확인 후 다시 시도해주세요.", "history.back();"); +// +// //닉네임 유효성 검사 +// String result = memberService.selectMemberNickNameValidCheck(memberVO, model, 1); +// if (result != null) { +// return result; +// } +// +// memberVO.setUpdId(CommUtil.getMngrMemId()); +// memberVO.setUpdIp(request.getRemoteAddr()); +// memberService.updateMember(memberVO); +// +// return CommUtil.doComplete(model, "완료", "수정 되었습니다.", "location.href='mngrMemberView.do?" + memberVO.getQuery() + "'"); +// } +// +// /** +// * 아이디 중복 검사 +// * @param searchVO +// * @return +// */ +// @RequestMapping(value = "/_mngr_/member/mngrMemberCheckId.ajax", method = RequestMethod.GET, produces = "application/json; charset=UTF-8") +// @ResponseBody +// public HashMap mngrMemberCheckId(@ModelAttribute("searchVO") MemberVO searchVO) { +// HashMap json = memberService.selectMemberIdDuplCheck(searchVO); +// return json; +// } +// +// /** +// * 닉네임 중복검사 ajax +// * @param searchVO +// * @return +// */ +// @RequestMapping(value = "/_mngr_/member/mngrMemberCheckNickName.ajax", method = RequestMethod.GET, produces = "application/json; charset=UTF-8") +// @ResponseBody +// public HashMap mngrMemberCheckNickName(@ModelAttribute("searchVO") MemberVO searchVO) { +// HashMap json = memberService.selectMemberNickNameDuplCheck(searchVO); +// return json; +// } +// +// /** +// * 회원정보 +// * @param searchVO +// * @param model +// * @return +// * @throws IOException, SQLException, RuntimeException +// */ +// @RequestMapping(value = "/_mngr_/member/mngrMemberView.do", method = {RequestMethod.GET, RequestMethod.POST}) +// public String mngrMemberView(@ModelAttribute("searchVO") MemberVO searchVO, ModelMap model, HttpServletRequest request) throws IOException, SQLException, RuntimeException { +// searchVO.setAct("UPDATE"); +// MemberVO result = memberService.selectMemberView(searchVO); +// +// MngrCodeVO mngrCodeVO = new MngrCodeVO(); +// +// /* 방진회용 코드 S*/ +// mngrCodeVO.setSchCode("career1"); +// model.addAttribute("career1", mngrCodeService.mngrCodeList(mngrCodeVO)); +// +// mngrCodeVO.setSchCode("career2"); +// model.addAttribute("career2", mngrCodeService.mngrCodeList(mngrCodeVO)); +// /* 방진회용 코드 E*/ +// +// +// MngrJoinFormConfigSearchVO joinFormVO = joinFormConfigService.mngrGetJoinFormBySiteCode(result.getRegSiteCode(), null); +// model.addAttribute("joinForm", joinFormVO); +// +// mngrCodeVO.setSchCode("memstatuscd"); +// model.addAttribute("statusCodeList", mngrCodeService.mngrCodeList(mngrCodeVO)); +// model.addAttribute("result", result); +// model.addAttribute("searchVO", searchVO); +// +// return "itgcms/mngr/member/mngrMemberRegist"; +// } +// +// /** +// * 회원정보 조회시 비밀번호 입력폼에서 비밀번호 검사 +// * @param searchVO +// * @param model +// * @return +// * @throws NoSuchAlgorithmException +// */ +// @RequestMapping(value="/_mngr_/chkPassBfView.ajax") +// @ResponseBody +// public boolean mngrCodeDupleCheck(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException, NoSuchAlgorithmException { +// String chkPw; +// String mngrId; +// String resultStr; +// +// ItgMap licenseVO = CommUtil.getSystemLicenseVO(request, "license"); +// String lId = CommUtil.seedDec256(CommUtil.isNull(licenseVO.getValue(0),"")); +// mngrId = request.getParameter("mngrId"); +// chkPw = CommUtil.hexSha256(request.getParameter("chkPw")); +// +// if (lId.equals(mngrId)) { +// if (chkPw.equals(licenseVO.getValue(2))) { +// return true; +// } else { +// return false; +// } +// } +// +// resultStr = mngrManagerService.chkPassBfView(mngrId); +// +// return chkPw.equals(resultStr); +// } +// +// /** +// * 비밀번호 초기화 +// * @param memberVO +// * @param model +// * @return +// */ +// @RequestMapping(value = "/_mngr_/member/mngrMemberInitPass.do", method = RequestMethod.POST) +// public String mngrManagerInitPass(@ModelAttribute("memberVO") MemberVO memberVO, ModelMap model) { +// memberService.updateMemberInitPass(memberVO); +// return CommUtil.doComplete(model, "완료", "비밀번호가 초기화 되었습니다.", "location.href='mngrMemberView.do?" + memberVO.getQuery() + "'"); +// } +// +// /** +// * 회원정보 삭제 +// * @param memberVO +// * @param model +// * @return +// */ +// @RequestMapping(value = "/_mngr_/member/mngrMemberDelProc.do", method = RequestMethod.POST) +// public String mngrMemberDelProc(@ModelAttribute("memberVO") MemberVO memberVO, ModelMap model) { +// memberService.updateMemberDel(memberVO); +// return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='mngrMemberList.do?" + memberVO.getQuery() + "'"); +// } +// +// /** +// * 회원정보 일괄 삭제 +// * @param memberVO +// * @param model +// * @return +// */ +// @RequestMapping(value = "/_mngr_/member/mngrMemberChkDelProc.do", method = RequestMethod.POST) +// public String mngrMemberChkDelProc(@ModelAttribute("memberVO") MemberVO memberVO, ModelMap model) { +// memberService.updateMemberChkDel(memberVO); +// return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='mngrMemberList.do?" + memberVO.getQuery() + "'"); +// } +// +// /** +// * 회원정보 엑셀 다운로드 // 사용안함 2016-04-06 : common/ExcelDownLoad.java로 이동 +// * @param searchVO +// * @return +// */ +/* @RequestMapping(value = "/_mngr_/member/mngrMemberExcelDownload.do", method = RequestMethod.POST) + public ModelAndView mngrMemberExcelDownload(@ModelAttribute("memberVO") MemberVO searchVO) { + List resultList = memberService.selectMemberList(searchVO); + searchVO.setSchExcel("N"); + + ModelAndView mav = new ModelAndView(mngrMemberExcelView); + mav.addObject("resultList", resultList); + return mav; + } + */ + +} diff --git a/src/main/java/egovframework/itgcms/mngr/menu/web/MngrBoardReactionController.java b/src/main/java/egovframework/itgcms/mngr/menu/web/MngrBoardReactionController.java new file mode 100644 index 0000000..a1ff71b --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/menu/web/MngrBoardReactionController.java @@ -0,0 +1,131 @@ +package egovframework.itgcms.mngr.menu.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; +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.RequestMapping; + +import egovframework.itgcms.common.MngrSessionVO; +import egovframework.itgcms.core.board.service.BoardReactionSearchVO; +import egovframework.itgcms.core.board.service.BoardService; +import egovframework.itgcms.core.comment.service.CommentVO; +import egovframework.itgcms.core.site.service.MngrSiteService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +@Controller +public class MngrBoardReactionController { + + @Resource(name="boardService") + private BoardService boardService; + + @Resource(name="mngrSiteService") + private MngrSiteService siteService; + + @RequestMapping(value="/_mngr_/boardReaction/replyList.do") + public String mngrReplyMainPage(@ModelAttribute("boardSearchVO") BoardReactionSearchVO boardSearchVO, + @ModelAttribute("commentVO") CommentVO commentVO, + ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException{ + + String siteCode = request.getParameter("siteCode"); + if (siteCode == null || "".equals(siteCode)) { + siteCode = "all"; + } + + String pageType = request.getParameter("pageType"); + if (pageType == null || "".equals(pageType)) { + pageType="replList"; + } + + + if ("replList".equals(pageType)) { + + boardSearchVO.setSiteCode(siteCode); + MngrSessionVO mngrSessionVo = (MngrSessionVO)request.getSession().getAttribute("mngrSessionVO"); + String mngrId = mngrSessionVo.getId(); + + + boardSearchVO.setSchRegmemid(mngrId); + + + boardSearchVO.setPageUnit(Integer.parseInt(boardSearchVO.getViewCount()));//viewCount + boardSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(boardSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(boardSearchVO.getPageUnit()); + paginationInfo.setPageSize(boardSearchVO.getPageSize()); + + boardSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + boardSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + boardSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + if (boardSearchVO.getSiteCode()==null || "".equals(boardSearchVO.getSiteCode())) { + boardSearchVO.setSiteCode("all"); + } + int totCnt = boardService.getReplyTotCnt(boardSearchVO); + List replList = boardService.selectReplyList(boardSearchVO); + + model.addAttribute("resultList", replList); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("totCnt", totCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); //페이지 No 의 시작 값 가상의 넘버링 + + } else if ("commentList".equals(pageType)) { + + boardSearchVO.setSiteCode(siteCode); + MngrSessionVO mngrSessionVo = (MngrSessionVO)request.getSession().getAttribute("mngrSessionVO"); + String mngrId = mngrSessionVo.getId(); + + + boardSearchVO.setSchRegmemid(mngrId); + + + boardSearchVO.setPageUnit(Integer.parseInt(boardSearchVO.getViewCount()));//viewCount + boardSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(boardSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(boardSearchVO.getPageUnit()); + paginationInfo.setPageSize(boardSearchVO.getPageSize()); + + boardSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + boardSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + boardSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + if (boardSearchVO.getSiteCode()==null || "".equals(boardSearchVO.getSiteCode())) { + boardSearchVO.setSiteCode("all"); + } + int totCnt = boardService.getCommentTotCnt(boardSearchVO); + List commentList = boardService.selectCommentList(boardSearchVO); + + model.addAttribute("resultList", commentList); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("totCnt", totCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); //페이지 No 의 시작 값 가상의 넘버링 + + + } + + + model.addAttribute("pageType", pageType); + model.addAttribute("siteList", siteService.mngrSiteList()); + model.addAttribute("searchSite", siteCode); + + return "itgcms/mngr/menu/boardReactionList"; + } + +} diff --git a/src/main/java/egovframework/itgcms/mngr/menu/web/MngrMenuController.java b/src/main/java/egovframework/itgcms/mngr/menu/web/MngrMenuController.java new file mode 100644 index 0000000..3d15f7f --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/menu/web/MngrMenuController.java @@ -0,0 +1,1262 @@ +package egovframework.itgcms.mngr.menu.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.support.RedirectAttributesModelMap; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.common.MngrSessionVO; +import egovframework.itgcms.core.board.service.BoardService; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigSearchVO; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigService; +import egovframework.itgcms.core.menu.service.MngrMenuSatisfactionSearchVO; +import egovframework.itgcms.core.menu.service.MngrMenuSatisfactionVO; +import egovframework.itgcms.core.menu.service.MngrMenuSearchVO; +import egovframework.itgcms.core.menu.service.MngrMenuService; +import egovframework.itgcms.core.menu.service.MngrMenuVO; +//import egovframework.itgcms.core.program.service.MngrProgramSearchVO; +//import egovframework.itgcms.core.program.service.MngrProgramService; +import egovframework.itgcms.core.site.service.MngrSiteService; +import egovframework.itgcms.core.site.service.MngrSiteVO; +//import egovframework.itgcms.core.social.service.SocialMediaService; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + + +/** + * @파일명 : MngrMenuController.java + * @파일정보 : 메뉴/컨텐츠관리 컨트롤러 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class MngrMenuController { + + /** MngrMenuService */ + @Resource(name = "mngrMenuService") + private MngrMenuService mngrMenuService; + + /** MngrSiteService */ + @Resource(name = "mngrSiteService") + private MngrSiteService mngrSiteService; + + /** MngrProgramService */ +// @Resource(name = "mngrProgramService") +// private MngrProgramService mngrProgramService; + + /** MngrBoardconfigService */ + @Resource(name = "mngrBoardconfigService") + private MngrBoardconfigService mngrBoardconfigService; + + /** boardService */ + @Resource(name = "boardService") + private BoardService boardService; + + /** boardService */ +// @Resource(name = "socialMediaService") +// private SocialMediaService socialMediaService; + + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + + private static final Logger logger = LogManager.getLogger(MngrMenuController.class); + private static final int MAIN_PAGE_CONTENTS_MAX_LENGTH = 4; + + + @RequestMapping(value = "/_mngr_/menu/mngrMenuMain.do") + public String mngrMenuMain(@ModelAttribute("searchVO") MngrMenuSearchVO mngrMenuSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + return "itgcms/mngr/menu/mngrMenuMain"; + } + + + /** + * 메뉴 목록 ajax , 관리자, 사용자 공용 + * @param pcode + * @param response + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/comm/menu/treeSubList.ajax") + public void mngrTreeSubList(String pcode , HttpServletResponse response) throws IOException, SQLException, RuntimeException { + pcode = CommUtil.isNull(pcode, "0"); + List result = mngrMenuService.mngrTreeSubList(pcode); + String json = "["; + for(int i = 0; i < result.size(); i++){ + MngrMenuVO menuVO = result.get(i); + json += "{" + + "\"id\": \"" + menuVO.getMenuCode() + "\" " + + ",\"name\": \"" + menuVO.getMenuName() + "\" " + + ",\"pId\": \"" + menuVO.getMenuPcode() + "\" " + + ",\"depth\": \"" + menuVO.getMenuDepth() + "\" " + + ",\"useType\": \"" + menuVO.getMenuUsetype() + "\" " + + "}" ; + if(i < result.size() - 1){ + json += ","; + } + } + json += "]"; + CommUtil.printWriter(json, response); + } + + @RequestMapping(value="/_mngr_/menu/mngrMenuRegistAjax.do") + public String mngrMenuRegist(@ModelAttribute("mngrMenuVO") MngrMenuVO mngrMenuVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + MngrMenuVO result = mngrMenuService.mngrMenuRegistAjax(mngrMenuVO); + if("REGIST".equals(mngrMenuVO.getAct())){ + model.addAttribute("result2",result); // 등록시에는 입력항목들에 데이터가 없어야 하는데, 입력항복에 기본으로 result. 으로 돼있어서 result2를 만들어서 입력항목에 값이 안들어가게함 + }else{ + model.addAttribute("result",result); + } +// model.addAttribute("programList", mngrProgramService.mngrProgramListAjax(new MngrProgramSearchVO())); + model.addAttribute("boardList", mngrBoardconfigService.mngrBoardconfigListAjax(new MngrBoardconfigSearchVO())); + model.addAttribute("searchVO", mngrMenuVO); + + //전체 메뉴 가져오기 + MngrMenuVO tmpMenuVO = new MngrMenuVO(); + tmpMenuVO.setId(mngrMenuVO.getId()); + tmpMenuVO.setSchFld("mngr"); + model.addAttribute("subMenuList", mngrMenuService.mngrMenuSubList(tmpMenuVO)); + + return "itgcms/mngr/menu/mngrMenuRegistAjax"; + } + + @RequestMapping(value = "/_mngr_/menu/mngrMenuDupleCheck.ajax") + public void mngrMenuDupleCheck(@ModelAttribute("mngrMenuVO") MngrMenuVO mngrMenuVO, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + int cnt = mngrMenuService.mngrMenuDupleCheck(mngrMenuVO); + + CommUtil.printWriter("{\"result\":"+cnt+"}", response); + } + + @RequestMapping(value = "/_mngr_/menu/mngrMenuRegistUpdateAjax.ajax", produces="text/plain") + public void mngrMenuRegistUpdateAjax(@ModelAttribute("searchVO") MngrMenuVO mngrMenuVO, MultipartHttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + + String result = "0"; + String message = "데이터 저장 중 오류가 발생했습니다. 다시 시도해 주세요"; + + String menuType = CommUtil.isNull(mngrMenuVO.getMenuType(), ""); + + mngrMenuVO.setSiteCode(CommUtil.strSplitGet(mngrMenuVO.getMenuPfullcode(), "1")); + if("0".equals(menuType)){ + mngrMenuVO.setMenuSubType(mngrMenuVO.getSubMenuList()); + }else if("2".equals(menuType)){ + mngrMenuVO.setMenuSubType(mngrMenuVO.getProgramList()); + }else if("3".equals(menuType)){ + mngrMenuVO.setMenuSubType(mngrMenuVO.getBoardList()); + } + + //ajax 이미지 저장시 한글 깨짐 방지 + /*String menuName = request.getParameter("menuName") == null ? "": new String(request.getParameter("menuName").getBytes("8859_1"), "utf-8"); + String menuMemo = request.getParameter("menuMemo") == null ? "": new String(request.getParameter("menuMemo").getBytes("8859_1"), "utf-8"); + String menuPfullname = request.getParameter("menuPfullname") == null ? "": new String(request.getParameter("menuPfullname").getBytes("8859_1"), "utf-8"); + String menuContents = request.getParameter("menuContents") == null ? "": new String(request.getParameter("menuContents").getBytes("8859_1"), "utf-8"); + String menuImgAlt = request.getParameter("menuImgAlt") == null ? "": new String(request.getParameter("menuImgAlt").getBytes("8859_1"), "utf-8"); + String menuUrl = request.getParameter("menuUrl") == null ? "": new String(request.getParameter("menuUrl").getBytes("8859_1"), "utf-8"); + String menuMngurl = request.getParameter("menuMngurl") == null ? "": new String(request.getParameter("menuMngurl").getBytes("8859_1"), "utf-8"); + + mngrMenuVO.setMenuName(menuName); + mngrMenuVO.setMenuMemo(menuMemo); + mngrMenuVO.setMenuPfullname(menuPfullname); + mngrMenuVO.setMenuContents(menuContents); + mngrMenuVO.setMenuImgAlt(menuImgAlt); + mngrMenuVO.setMenuUrl(menuUrl); + mngrMenuVO.setMenuMngurl(menuMngurl);*/ + + if("REGIST".equals(mngrMenuVO.getAct())){ + /* + * 등록 모드 + */ + // 입력값 체크 + if("".equals(CommUtil.isNull(mngrMenuVO.getMenuCode(), ""))){ + result = "3"; + message = "메뉴코드를 입력 해 주세요."; + } else if("".equals(CommUtil.isNull(mngrMenuVO.getMenuName(), ""))){ + result = "3"; + message = "메뉴이름을 입력 해 주세요."; + } else if(("2".equals(menuType)|| "3".equals(menuType)) && "".equals(CommUtil.isNull(mngrMenuVO.getMenuUrl(), ""))) { + result = "3"; + message = "사용자 링크주소을 입력 해 주세요."; + } else if(("2".equals(menuType)|| "3".equals(menuType)) && "".equals(CommUtil.isNull(mngrMenuVO.getMenuMngurl(), ""))) { + result = "3"; + message = "관리 링크주소을 입력 해 주세요."; + /*} else if("".equals(CommUtil.isNull(mngrMenuVO.getMenuNavi(), ""))){ + result = "3"; + message = "메뉴 네비게이션을 입력 해 주세요.";*/ + }else { //입력값 정상 + int resultCnt = mngrMenuService.mngrMenuDupleCheck(mngrMenuVO); //메뉴코드 중복 검사 + if(resultCnt > 0){ + result = "2"; + message = "메뉴코드가 중복 되었습니다. 확인 후 다시 시도해 주세요"; + }else{ + // 메뉴코드 정상 + + getUploadImage(request, mngrMenuVO);//subMain 이미지 저장 + + mngrMenuVO.setRegmemid(CommUtil.getMngrMemId()); + mngrMenuService.mngrMenuRegistProc(mngrMenuVO); + + result = "1"; + message = "등록 되었습니다."; + } + } + + }else if("UPDATE".equals(mngrMenuVO.getAct())){ + /* + * 수정 모드 + */ + if("".equals(CommUtil.isNull(mngrMenuVO.getId(), ""))){ + result = "3"; + message = "메뉴코드 정보가 없습니다. 확인 후 다시 시도해 주세요."; + } else if("".equals(CommUtil.isNull(mngrMenuVO.getMenuName(), ""))){ + result = "3"; + message = "메뉴이름을 입력 해 주세요."; + } else if(("2".equals(menuType)|| "3".equals(menuType)) && "".equals(CommUtil.isNull(mngrMenuVO.getMenuUrl(), ""))) { + result = "3"; + message = "사용자 링크주소을 입력 해 주세요."; + } else if(("2".equals(menuType)|| "3".equals(menuType)) && "".equals(CommUtil.isNull(mngrMenuVO.getMenuMngurl(), ""))) { + result = "3"; + message = "관리 링크주소을 입력 해 주세요."; + /*} else if("".equals(CommUtil.isNull(mngrMenuVO.getMenuNavi(), ""))){ + result = "3"; + message = "메뉴 네비게이션을 입력 해 주세요.";*/ + }else { //입력값 정상 + + getUploadImage(request, mngrMenuVO);//subMain 이미지 저장 + + mngrMenuVO.setUpdmemid(CommUtil.getMngrMemId()); + result = mngrMenuService.mngrMenuUpdateProc(mngrMenuVO); + + //result = "1"; + message = "수정 되었습니다."; + } + } + + String json = "{\"result\" : "+result+", \"message\" : \""+message+"\"}"; + CommUtil.printWriter(json, response); + } + + private void getUploadImage(MultipartHttpServletRequest request, MngrMenuVO mngrMenuVO) throws IOException, SQLException, RuntimeException{ + + MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request; //다중파일 업로드 + final Map files = multiRequest.getFileMap(); + + HashMap hmFile = CommUtil.fileUploadImageThumbail(multiRequest.getFileMap(), "menuImg" /*+ String.valueOf(1)*/, "subMain", "200", "200", true); + + if(hmFile != null){ + + mngrMenuVO.setMenuImg(String.valueOf(hmFile.get("F_SAVENAME"))); + //파일 삭제 + //원본이미지 + String img = CommUtil.getFileRoot() + System.getProperty("file.separator") + "subMain" + System.getProperty("file.separator") + mngrMenuVO.getOldMenuImg(); + String imgB = CommUtil.getFileRoot() + System.getProperty("file.separator") + "subMain" + System.getProperty("file.separator") + CommUtil.getThumbFileName(mngrMenuVO.getOldMenuImg(), "B"); + CommUtil.deleteFile(img); + CommUtil.deleteFile(imgB); + + }else{ // 첨부파일이 없으면 update 시 처리 + mngrMenuVO.setMenuImg(mngrMenuVO.getOldMenuImg()); + } + + } + + @RequestMapping(value = "/_mngr_/menu/mngrMenuRegistDeleteAjax.ajax") + public void mngrMenuRegistDeleteAjax(@ModelAttribute("searchVO") MngrMenuVO mngrMenuVO, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + mngrMenuVO.setDelmemid(CommUtil.getMngrMemId()); + + String result = "0"; + int subCount = mngrMenuService.mngrMenuSubCount(mngrMenuVO); + if(subCount == 0){ + mngrMenuVO.setDelmemid(CommUtil.getMngrMemId()); + mngrMenuService.mngrMenuRegistDeleteAjax(mngrMenuVO); + result = "1"; + }else{ + result = "2"; // 메뉴에 포함된 하위메뉴가 있어서 삭제 할 수 없습니다.\n하위메뉴를 먼저 삭제 해 주세요. + } + String json = "{\"result\" : "+result+", \"message\" : \""+result+"\"}"; + CommUtil.printWriter(json, response); + } + @RequestMapping(value="/_mngr_/menu/mngrMenuSwap.ajax") + public void mngrCodeSwap(@ModelAttribute("mngrMenuVO") MngrMenuVO mngrMenuVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String result = "0"; + result = mngrMenuService.mngrMenuSwap(mngrMenuVO); + CommUtil.printWriter("{\"result\" : "+result+"}", response); + } + @RequestMapping(value="/_mngr_/menu/mngrMenuMove.ajax") + public void mngrMenuMove(@ModelAttribute("mngrMenuVO") MngrMenuVO mngrMenuVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + String result = "0"; //알수없는 오류 + mngrMenuVO.setId(mngrMenuVO.getTargetCode()); //대상 메뉴의 정보를 가져오기 위해 id에 코드 설정. + MngrMenuVO targetMenuVO = mngrMenuService.mngrMenuRegistAjax(mngrMenuVO); // 대상메뉴 정보 + mngrMenuVO.setId(mngrMenuVO.getOriginalCode()); //원본(이동할)메뉴 정보를 가져오기 위해 id에 코드 설정 + MngrMenuVO originalMenuVO = mngrMenuService.mngrMenuRegistAjax(mngrMenuVO);// 원본(이동할)메뉴 정보 + if(targetMenuVO == null){ + result = "2"; //대상 메뉴 정보가 없습니다. + } else if(originalMenuVO == null){ + result = "3"; //원본 메뉴 정보가 없습니다. + } else if("1".equals(originalMenuVO.getMenuDepth())){ + //원본메뉴가 1depth 인지 확인해서 처리 + result = "4"; //최상위 메뉴는 이동 할 수 없습니다. + }else{ + + // 1. 원본메뉴의 pcode를 대상메뉴 코드로 설정 + // 2. 원본메뉴의 order는 pcode 가 대상메뉴 코드인 것들의 max() +1 + originalMenuVO.setMenuPcode(targetMenuVO.getMenuCode()); //mngrMenuVO.getTargetCode() 와 같다. + + //fullcode, fullname 업데이트를 위한 설정 + //1. oldpfullname, oldpfullcode 에 pfullcode, pfullname을 입력 + originalMenuVO.setMenuOldpfullname(originalMenuVO.getMenuPfullname()); + originalMenuVO.setMenuOldpfullcode(originalMenuVO.getMenuPfullcode()); + //2. pfullcode, pfullname 에 대상메뉴의 pfullcode, pfullname 저장 + originalMenuVO.setMenuPfullname(targetMenuVO.getMenuPfullname()); + originalMenuVO.setMenuPfullcode(targetMenuVO.getMenuPfullcode()); + + originalMenuVO.setMenuMoveDepth( + (Integer.parseInt(targetMenuVO.getMenuDepth() ) + 1) // 이동할 코드의 뎁스 + 1, 하위로 들어가니까 1이 더해져 야 함 + - Integer.parseInt(originalMenuVO.getMenuDepth() ) + ); + originalMenuVO.setSiteCode(CommUtil.strSplitGet(originalMenuVO.getMenuPfullcode(), "1")); + mngrMenuService.mngrMenuMove(originalMenuVO); + result = "1"; //메뉴가 이동 되었습니다. + } + CommUtil.printWriter("{\"result\" : "+result+"}", response); + } + + @RequestMapping(value="/_mngr_/menu/mngMenuCreate.ajax") + public ModelAndView mngMenuCreateFile2(@ModelAttribute("mngrMenuVO") MngrMenuVO mngrMenuVO, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + + ModelAndView mav = new ModelAndView("jsonView"); + + String result = "0"; //알수없는 오류 + + if("".equals(CommUtil.isNull(mngrMenuVO.getId(), ""))){ + result = "2"; // 선택된 최상위 메뉴 정보가 없습니다. + }else{ + // 재귀호출로 메뉴 리스트 만들기 + String path = CommUtil.getContextRoot() + System.getProperty("file.separator") + "WEB-INF/jsp/egovframework/itgcms/user/template/include/"; + + //전체 메뉴 가져오기 + mngrMenuVO.setId(mngrMenuVO.getId()); + mngrMenuVO.setMinDepth("1"); + List resultList = mngrMenuService.mngrMenuListRecursive(mngrMenuVO); + + //GNB 파일 생성 + String strResult = recursiveGNB_TYPE_A(resultList, mngrMenuVO.getId(), 0, "GNB", 1, 3); + strResult = "
      " + strResult + "
    "; + + CommUtil.createJspFile(path, "Include_" + mngrMenuVO.getId() + "_A_GNB.jsp", strResult); + + //GNB TYPE B 파일 생성 + String strResultB = recursiveGNB_TYPE_B(resultList, mngrMenuVO.getId(), 0, "GNB", 1, 3,""); + strResultB = "
      " + strResultB + "
    "; + CommUtil.createJspFile(path, "Include_" + mngrMenuVO.getId() + "_B_GNB.jsp", strResultB); + + //GNB TYPE B Mobile 파일 생성 + String strResultBMobile = recursiveGNB_TYPE_B_MOBILE(resultList, mngrMenuVO.getId(), 0, "GNB", 1, 4,""); // 2017-11-28 신차구입 > ..> 제작사 안내 자동차 쪽 뎁스 추가로 3에서 4로 파라미터를 수정했습니다. + strResultBMobile = "
      " + strResultBMobile + "
    "; + CommUtil.createJspFile(path, "Include_" + mngrMenuVO.getId() + "_B_GNB_MOBILE.jsp", strResultBMobile); + + //GNB TYPE C 파일 생성 + String strResultC = recursiveGNB_TYPE_C(resultList, mngrMenuVO.getId(), 0, "GNB", 1, 3,""); + CommUtil.createJspFile(path, "Include_" + mngrMenuVO.getId() + "_C_GNB.jsp", strResultC); + + //SNB TYPE A 파일 생성 + // 재귀함수 호출 없이 바로 생성함. + for(int i = 0; i < resultList.size(); i++){ + MngrMenuVO menuVO = (MngrMenuVO)resultList.get(i); + String str = ""; + String head = "\n\t\t
  • \n"; + head += ""+menuVO.getMenuName()+""; + head += "
    "; + head += "
      "; + String body = ""; + for(int k = 0; k < resultList.size(); k++){ + MngrMenuVO tmpMenuVO = (MngrMenuVO)resultList.get(k); + if("0".equals(tmpMenuVO.getMenuUsetype())){ + String idName = "id=\"SNB_"+tmpMenuVO.getMenuCode()+"\""; + body += "
    • "+getMenuLink(tmpMenuVO, mngrMenuVO.getId(), idName)+"
    • "; + } + } + String tail = "
  • "; + + String depth1 = head + body + tail; + + body = ""; + head = "
  • \n"; + head += ""; + head += "
    "; + head += "
      "; + for(int j = 0; j < menuVO.getMngrMenuList().size(); j++){ + MngrMenuVO tmpSubMenuVO = (MngrMenuVO)menuVO.getMngrMenuList().get(j); + String idName = "id=\"SNB_"+tmpSubMenuVO.getMenuCode()+"\""; + body += "
    • "+getMenuLink(tmpSubMenuVO, mngrMenuVO.getId(), idName)+"
    • "; + } + tail = "
  • "; + String depth2 =head + body + tail; + str = ""; + + CommUtil.createJspFile(path, "Include_" + mngrMenuVO.getId() + "_A_LEFT" + "_" + menuVO.getMenuCode() + ".jsp", str); + + for(int j = 0; j < menuVO.getMngrMenuList().size(); j++){ + MngrMenuVO tmpSubMenuVO = (MngrMenuVO)menuVO.getMngrMenuList().get(j); + + if(tmpSubMenuVO.getMngrMenuList().size() > 0){ + + String body3 = ""; + + for(int k = 0; k < tmpSubMenuVO.getMngrMenuList().size(); k++){ + MngrMenuVO tmpSub2MenuVO = (MngrMenuVO)tmpSubMenuVO.getMngrMenuList().get(k); + String idName3 = "id=\"SNB_"+tmpSub2MenuVO.getMenuCode()+"\""; + body3 += "
  • "+getMenuLink(tmpSub2MenuVO, mngrMenuVO.getId(), idName3)+"
  • "; + } + String depth3 = head + body3 + tail; + + str = ""; + CommUtil.createJspFile(path, "Include_" + mngrMenuVO.getId() + "_A_LEFT" + "_" + tmpSubMenuVO.getMenuCode() + ".jsp", str); + } + } + } + + + + + + + + + + + + + + + + //SNB TYPE B 파일 생성 + for(int i = 0; i < resultList.size(); i++){ + MngrMenuVO menuVO = (MngrMenuVO)resultList.get(i); + String str = ""; + if(menuVO.getMngrMenuList() != null){ + str = recursiveSNB_TYPE_B(menuVO.getMngrMenuList(), mngrMenuVO.getId(),0, "SNB", 2, 3); + } + if(!"".equals(str)){ + // str = "

    "+menuVO.getMenuName().replaceAll("&", "&")+"

    "; + str = "

    "+menuVO.getMenuName().replaceAll("&", "&")+"

    \n
      " + str + "
    "; + } + //depth2 + CommUtil.createJspFile(path, "Include_" + mngrMenuVO.getId() + "_B_LEFT" + "_" + menuVO.getMenuCode() + ".jsp", str); + } + + //SNB TYPE B 모바일용 파일 생성 + for(int i = 0; i < resultList.size(); i++){ + MngrMenuVO menuVO = (MngrMenuVO)resultList.get(i); + String str = ""; + if(menuVO.getMngrMenuList() != null){ + str = recursiveSNB_TYPE_B(menuVO.getMngrMenuList(), mngrMenuVO.getId(),0, "SNB_M", 2, 3); + } + if(!"".equals(str)){ + // str = "

    "+menuVO.getMenuName().replaceAll("&", "&")+"

    "; + str = "
      " + str + "
    "; + } + //depth2 + CommUtil.createJspFile(path, "Include_" + mngrMenuVO.getId() + "_B_LEFT" + "_Mobile_" + menuVO.getMenuCode() + ".jsp", str); + } + + // 사이트맵 파일 생성 + //GNB 파일 생성 + strResult = recursiveSitemap(resultList, mngrMenuVO.getId(), 0, "SITEMAP", 1, 3); + strResult = "
      " + strResult + "
    "; + CommUtil.createJspFile(path, "Include_" + mngrMenuVO.getId() + "_SITEMAP.jsp", strResult); + + result = "1"; + //resultList.clear(); + mngrMenuVO = null; + + } + + mav.addObject("result","1"); + mav.setViewName("jsonView"); + + return mav; + } + + @SuppressWarnings("unchecked") + private String recursive(List result, String siteCode, int count, String type, int sDepth, int eDepth){ + String str = ""; + int nowCount = count; + String depth = ""; + for(int i = 0;i < result.size(); i++){ + MngrMenuVO menuVO = result.get(i); + depth = menuVO.getMenuDepth(); + /*if("2".equals(depth) && "GNB".equals(type) && !"0".equals(menuVO.getMenuUsetype())){ + continue;//GNB메뉴 생성시 대메뉴 표시 (menuUsetype != 0) 이면 메뉴 표출 안한다. + }*/ + if(!"0".equals(menuVO.getMenuUsetype())){ + continue;//전체 메뉴 생성시 메뉴 표시 (menuUsetype != 0) 이면 메뉴 표출 안한다. + } + String className = "";//css class 적용을 위한 설정 + String idName = ""; //left메뉴 선택표시를 위한 아이디설정 + if(i == 0){ + className = "{{LI_FIRST}}"; + }else if( i == result.size() - 1){ + className = "{{LI_LAST}}"; + }else{ + className = "{{LI_LIST}}"; + } + + if("SITEMAP".equals(type)){ + if((i+1) != 0 && (i+1) % 4 == 0){ + className = "{{LI_LAST}}"; + }else{ + className = "{{LI_LIST}}"; + } + } + + idName = "id=\""+type+"_"+menuVO.getMenuCode()+"\""; + + str += "
  • \n"; + if("SITEMAP".equals(type) && "2".equals(depth)){ + str += "

    "+menuVO.getMenuName()+"

    "; + }else{ + str += getMenuLink(menuVO, siteCode, idName); + } + + if(menuVO.getMngrMenuList() != null){//하위메뉴가 있으면 하위메뉴 호출 (재귀호출) + if(Integer.valueOf(menuVO.getMenuDepth()) >= sDepth && Integer.valueOf(menuVO.getMenuDepth()) <= eDepth){ + if(menuVO.getMngrMenuList().size() > 0) + str += recursive(menuVO.getMngrMenuList(), siteCode, ++count, type, sDepth, eDepth); + } + } + str += "
  • \n"; + } + if(nowCount > 0){//처음엔 ul이 필요없음.(코딩에 의한 설정) + /*str = "
      \n" + str + "
    \n";*/ + + String dp = ""; + if(!"".equals(depth)) dp = String.valueOf(Integer.parseInt(depth) - 1); + if("SITEMAP".equals(type)){ + if("2".equals(dp)){ + str = "
      \n" + str + "
    \n"; + }else if("3".equals(dp)){ + str = "
      \n" + str + "
    \n"; + } + + }else{ + str = "
      \n" + str + "
    \n"; + } + } + return str; + } + + /** + * GNB 인클루드 파일 생성 재귀함수 + * @param result + * @param siteCode + * @param count + * @param type + * @param sDepth + * @param eDepth + * @return + */ + @SuppressWarnings("unchecked") + private String recursiveGNB_TYPE_A(List result, String siteCode, int count, String type, int sDepth, int eDepth){ + String str = ""; + int nowCount = count; + String depth = ""; + + // depth 1은 사이트 코드 + // depth 2는 대메뉴, 3 중메뉴, 4 소메뉴 + for(int i = 0;i < result.size(); i++){ + MngrMenuVO menuVO = result.get(i); + depth = menuVO.getMenuDepth(); + if ("2".equals(depth)) { + /* + * if("2".equals(depth) && "GNB".equals(type) && + * !"0".equals(menuVO.getMenuUsetype())){ continue;//GNB메뉴 생성시 + * 대메뉴 표시 (menuUsetype != 0) 이면 메뉴 표출 안한다. } + */ + if(!"0".equals(menuVO.getMenuUsetype())){ + continue;//메뉴 표시 (menuUsetype != 0) 이면 메뉴 표출 안한다. + } + String idName = ""; //left메뉴 선택표시를 위한 아이디설정 + + idName = "id=\""+type+"_"+menuVO.getMenuCode()+"\""; + + str += "\n\t
  • \n\t\t"; + str += getMenuLink(menuVO, siteCode, idName); + + if(menuVO.getMngrMenuList() != null){//하위메뉴가 있으면 하위메뉴 호출 (재귀호출) + if(Integer.valueOf(menuVO.getMenuDepth()) >= sDepth && Integer.valueOf(menuVO.getMenuDepth()) <= eDepth){ + if(menuVO.getMngrMenuList().size() > 0) + str += recursiveGNB_TYPE_A(menuVO.getMngrMenuList(), siteCode, ++count, type, sDepth, eDepth); + } + } + str += "\n\t
  • \n"; + } + + } + if(nowCount > 0){//처음엔 ul이 필요없음.(코딩에 의한 설정) + // 서브의 첫번째 메뉴에서 ul을 만들기때문에 depth-1해야 함. + String dp = ""; + if(!"".equals(depth)) dp = String.valueOf(Integer.parseInt(depth) - 1); + str = "\n
      \n" + str + "
    \n"; + } + return str; + } + + /** + * GNB 인클루드 파일 생성 재귀함수 + * @param result + * @param siteCode + * @param count + * @param type + * @param sDepth + * @param eDepth + * @return + */ + @SuppressWarnings("unchecked") + private String recursiveGNB_TYPE_B(List result, String siteCode, int count, String type, int sDepth, int eDepth, String menuName){ + String str = ""; + int nowCount = count; + String depth = ""; + // depth 1은 사이트 코드 + // depth 2는 대메뉴, 3 중메뉴, 4 소메뉴 + for(int i = 0;i < result.size(); i++){ + MngrMenuVO menuVO = result.get(i); + depth = menuVO.getMenuDepth(); + + if ("2".equals(depth)) { + /*if("2".equals(depth) && "GNB".equals(type) && !"0".equals(menuVO.getMenuUsetype())){ + continue;//GNB메뉴 생성시 대메뉴 표시 (menuUsetype != 0) 이면 메뉴 표출 안한다. + }*/ + if(!"0".equals(menuVO.getMenuUsetype())){ + continue;//메뉴 표시 (menuUsetype != 0) 이면 메뉴 표출 안한다. + } + String idName = ""; //left메뉴 선택표시를 위한 아이디설정 + + idName = "id=\""+type+"_"+menuVO.getMenuCode()+"\""; + + str += "\n\t
  • \n\t\t"; + str += getMenuLink(menuVO, siteCode, idName); + + if(menuVO.getMngrMenuList() != null){//하위메뉴가 있으면 하위메뉴 호출 (재귀호출) + if(Integer.valueOf(menuVO.getMenuDepth()) >= sDepth && Integer.valueOf(menuVO.getMenuDepth()) <= eDepth){ + if(menuVO.getMngrMenuList().size() > 0) + + str += recursiveGNB_TYPE_B(menuVO.getMngrMenuList(), siteCode, ++count, type, sDepth, eDepth, menuVO.getMenuName()); + } + } + str += "\n\t
  • \n"; + } + } + if(nowCount > 0){//처음엔 ul이 필요없음.(코딩에 의한 설정) + // 서브의 첫번째 메뉴에서 ul을 만들기때문에 depth-1해야 함. + String dp = ""; + if(!"".equals(depth)) dp = String.valueOf(Integer.parseInt(depth) - 1); + String tempStr = ""; + tempStr += "
  • \n"; + tempStr += "
    \n"; + tempStr += "

    "+menuName+"

    \n"; + tempStr += "
    "; + tempStr += "
  • \n"; + str = tempStr + str; + str = "\n
      \n" + str + "
    \n"; + }else{ + str = "\n\t
  • 전체메뉴
  • \n"+str; + } + return str; + } + + /** + * GNB 인클루드 파일 생성 재귀함수 + * @param result + * @param siteCode + * @param count + * @param type + * @param sDepth + * @param eDepth + * @return + */ + @SuppressWarnings("unchecked") + private String recursiveGNB_TYPE_B_MOBILE(List result, String siteCode, int count, String type, int sDepth, int eDepth, String menuName){ + String str = ""; + int nowCount = count; + String depth = ""; + // depth 1은 사이트 코드 + // depth 2는 대메뉴, 3 중메뉴, 4 소메뉴 + for(int i = 0;i < result.size(); i++){ + MngrMenuVO menuVO = result.get(i); + depth = menuVO.getMenuDepth(); + + // 2017-11-28 수정한 메소드 입니다 + /*if("2".equals(depth) && "GNB".equals(type) && !"0".equals(menuVO.getMenuUsetype())){ + continue;//GNB메뉴 생성시 대메뉴 표시 (menuUsetype != 0) 이면 메뉴 표출 안한다. + }*/ + if(!"0".equals(menuVO.getMenuUsetype())){ + continue;//메뉴 표시 (menuUsetype != 0) 이면 메뉴 표출 안한다. + } + String idName = ""; //left메뉴 선택표시를 위한 아이디설정 + + idName = "id=\""+type+"_"+menuVO.getMenuCode()+"\""; + + str += "\n\t
  • \n\t\t"; + str += getMenuLink(menuVO, siteCode, idName); + + if(menuVO.getMngrMenuList() != null){//하위메뉴가 있으면 하위메뉴 호출 (재귀호출) + if(Integer.valueOf(menuVO.getMenuDepth()) >= sDepth && Integer.valueOf(menuVO.getMenuDepth()) <= eDepth){ + if(menuVO.getMngrMenuList().size() > 0) + + str += recursiveGNB_TYPE_B_MOBILE(menuVO.getMngrMenuList(), siteCode, ++count, type, sDepth, eDepth, menuVO.getMenuName()); + } + } + str += "\n\t
  • \n"; + } + if(nowCount > 0){//처음엔 ul이 필요없음.(코딩에 의한 설정) + // 서브의 첫번째 메뉴에서 ul을 만들기때문에 depth-1해야 함. + String dp = ""; + if(!"".equals(depth)) dp = String.valueOf(Integer.parseInt(depth)-1); // 2017-11-28 신차구입 > ..> 제작사 안내 자동차 쪽 뎁스 추가로 -1 을 추가했구요 + /*String tempStr = ""; + tempStr += "
  • \n"; + tempStr += "
    \n"; + tempStr += "

    "+menuName+"

    \n"; + tempStr += "
    "; + tempStr += "
  • \n";*/ + //str = str; + str = "\n
      \n" + str + "
    \n"; + }else{ + str = "\n\t
  • 전체메뉴
  • \n"+str; + } + return str; + } + + + /** + * SNB(LNB) 타입 B 인클루드 재귀호출 + * @param result + * @param siteCode + * @param count + * @param type + * @param sDepth + * @param eDepth + * @return + */ + @SuppressWarnings("unchecked") + private String recursiveSNB_TYPE_B(List result, String siteCode, int count, String type, int sDepth, int eDepth){ + String str = ""; + int nowCount = count; + String depth = ""; + for(int i = 0;i < result.size(); i++){ + MngrMenuVO menuVO = result.get(i); + depth = menuVO.getMenuDepth(); + + if ("2".equals(depth)) { + + if(!"0".equals(menuVO.getMenuUsetype())){ + continue;//메뉴 표시 (menuUsetype != 0) 이면 메뉴 표출 안한다. + } + + String idName = ""; //left메뉴 선택표시를 위한 아이디설정 + idName = "id=\""+type+"_"+menuVO.getMenuCode()+"\""; + + if(menuVO.getMngrMenuList() != null && menuVO.getMngrMenuList().size() > 0){//하위메뉴가 있으면 하위메뉴 호출 (재귀호출) + str += "
  • \n"; + str += getMenuLink(menuVO, siteCode, idName); + if(Integer.valueOf(menuVO.getMenuDepth()) >= sDepth && Integer.valueOf(menuVO.getMenuDepth()) <= eDepth){ + if(menuVO.getMngrMenuList().size() > 0) + str += recursiveSNB_TYPE_B(menuVO.getMngrMenuList(), siteCode, ++count, type, sDepth, eDepth); + } + }else{ + str += "
  • \n"; + str += getMenuLink(menuVO, siteCode, idName); + } + str += "
  • \n"; + } + } + if(nowCount > 0){//처음엔 ul이 필요없음.(코딩에 의한 설정) + /*str = "
      \n" + str + "
    \n";*/ + + String dp = ""; + if(!"".equals(depth)) dp = String.valueOf(Integer.parseInt(depth) - 2); + if("2".equals(dp) || "3".equals(dp)){ + str = "\n
      \n" + str + "
    \n"; + }else{ + str = "\n\n" + str + "\n"; + } + } + return str; + } + + /** + * GNB 인클루드 파일 생성 재귀함수 + * @param result + * @param siteCode + * @param count + * @param type + * @param sDepth + * @param eDepth + * @return + */ + @SuppressWarnings("unchecked") + private String recursiveGNB_TYPE_C(List result, String siteCode, int count, String type, int sDepth, int eDepth, String menuName){ + String str = ""; + int nowCount = count; + String depth = ""; + // depth 1은 사이트 코드 + // depth 2는 대메뉴, 3 중메뉴, 4 소메뉴 + for(int i = 0;i < result.size(); i++){ + MngrMenuVO menuVO = result.get(i); + depth = menuVO.getMenuDepth(); + + if ("2".equals(depth)) { + /*if("2".equals(depth) && "GNB".equals(type) && !"0".equals(menuVO.getMenuUsetype())){ + continue;//GNB메뉴 생성시 대메뉴 표시 (menuUsetype != 0) 이면 메뉴 표출 안한다. + }*/ + if(!"0".equals(menuVO.getMenuUsetype())){ + continue;//메뉴 표시 (menuUsetype != 0) 이면 메뉴 표출 안한다. + } + String idName = ""; //left메뉴 선택표시를 위한 아이디설정 + + idName = "id=\""+type+"_"+menuVO.getMenuCode()+"\""+" title=\""+menuVO.getMenuName()+"\""; + + str += "\n\t
  • \n\t\t"; + str += getMenuLink(menuVO, siteCode, idName); + + if(menuVO.getMngrMenuList() != null){//하위메뉴가 있으면 하위메뉴 호출 (재귀호출) + if(Integer.valueOf(menuVO.getMenuDepth()) >= sDepth && Integer.valueOf(menuVO.getMenuDepth()) <= eDepth){ + if(menuVO.getMngrMenuList().size() > 0) + + str += recursiveGNB_TYPE_C(menuVO.getMngrMenuList(), siteCode, ++count, type, sDepth, eDepth, menuVO.getMenuName()); + } + } + str += "\n\t
  • \n"; + } + } + if(nowCount > 0){//처음엔 ul이 필요없음.(코딩에 의한 설정) + // 서브의 첫번째 메뉴에서 ul을 만들기때문에 depth-1해야 함. + String dp = ""; + if(!"".equals(depth)) dp = String.valueOf(Integer.parseInt(depth) - 1); + String tempStr = ""; +// tempStr += "
  • \n"; +// tempStr += "
    \n"; +// tempStr += "

    "+menuName+"

    \n"; +// tempStr += "
    "; +// tempStr += "
  • \n"; + str = tempStr + str; +// str = "\n
      \n" + str + "
    \n"; + }else{ + str = "\n\t
  • 전체메뉴
  • \n"+str; + } + return str; + } + + /** + * 사이트맵 인클루드 재귀 함수 + * @param result + * @param siteCode + * @param count + * @param type + * @param sDepth + * @param eDepth + * @return + */ + @SuppressWarnings("unchecked") + private String recursiveSitemap(List result, String siteCode, int count, String type, int sDepth, int eDepth){ + String str = ""; + int nowCount = count; + String depth = ""; + for(int i = 0;i < result.size(); i++){ + MngrMenuVO menuVO = result.get(i); + depth = menuVO.getMenuDepth(); + + if(!"0".equals(menuVO.getMenuUsetype())){ + continue;//메뉴 표시 (menuUsetype != 0) 이면 메뉴 표출 안한다. + } + + String className = "";//css class 적용을 위한 설정 + String idName = ""; //left메뉴 선택표시를 위한 아이디설정 + + idName = "id=\""+type+"_"+menuVO.getMenuCode()+"\""; + if((i+1) != 0 && (i+1) % 4 == 0){ + str += "
  • \n"; + }else{ + str += "
  • \n"; + } + if("2".equals(depth)){ + str += "

    "+menuVO.getMenuName()+"

    "; + }else{ + str += getMenuLink(menuVO, siteCode, idName); + } + + if(menuVO.getMngrMenuList() != null){//하위메뉴가 있으면 하위메뉴 호출 (재귀호출) + if(Integer.valueOf(menuVO.getMenuDepth()) >= sDepth && Integer.valueOf(menuVO.getMenuDepth()) <= eDepth){ + if(menuVO.getMngrMenuList().size() > 0) + str += recursiveSitemap(menuVO.getMngrMenuList(), siteCode, ++count, type, sDepth, eDepth); + } + } + str += "
  • \n"; + } + if(nowCount > 0){//처음엔 ul이 필요없음.(코딩에 의한 설정) + String dp = ""; + if(!"".equals(depth)) dp = String.valueOf(Integer.parseInt(depth) - 1); + if("2".equals(dp)){ + str = "
      \n" + str + "
    \n"; + }else if("3".equals(dp)){ + str = "
      \n" + str + "
    \n"; + } + } + return str; + } + + private String getMenuLink(MngrMenuVO menuVO, String siteCode, String idName){ + String url = "#none"; //구분값이 0,1,2,3,4 가 아니면 링크 없음. + String str = ""; + // 메뉴타입에 따른 링크 구분 + //0 폴더, 4 링크 menuVO.getMenuUrl 로 링크 + if("0".equals(menuVO.getMenuType()) + || "4".equals(menuVO.getMenuType()) + ){ + url = menuVO.getMenuUrl(); + }else if("1".equals(menuVO.getMenuType()) //CMS /web/contents/코드로 링크 + || "2".equals(menuVO.getMenuType()) //프로그램 /web/contents/코드로 링크 + || "3".equals(menuVO.getMenuType()) //게시판 /web/contents/코드로 링크 + ){ + url = "/" + siteCode+"/contents/"+menuVO.getMenuCode()+".do"; + } + if("".equals(url)) url = "#none"; + if("0".equals(menuVO.getMenuShowtype())){ + str += ""; + }else if("1".equals(menuVO.getMenuShowtype())){ + str += ""; + }else if("2".equals(menuVO.getMenuShowtype())){ + str += ""; + } + str += menuVO.getMenuName().replaceAll("&", "&")+""; + return str; + } + + @RequestMapping(value="/_mngr_/menu/mngrContentsUpdate.do") + public String mngrContentsUpdate(@ModelAttribute("mngrMenuVO") MngrMenuVO mngrMenuVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + MngrMenuVO result = mngrMenuService.mngrMenuContentsView(mngrMenuVO); + + mngrMenuVO.setMenuCode(mngrMenuVO.getId()); + mngrMenuVO.setRegmemid(((MngrSessionVO)request.getSession().getAttribute("mngrSessionVO")).getId()); + + String revision = request.getParameter("revision"); + if (revision != null && !"".equals(revision)) { + result = mngrMenuService.selectRevisionByIdx(revision); + result.setMenuType("revision"); + model.addAttribute("isRevision", true); + } + + MngrMenuVO tempSaved = mngrMenuService.getTemporarySaved(mngrMenuVO); + + model.addAttribute("tempSaved", tempSaved); + model.addAttribute("result", result); + model.addAttribute("menuCode", mngrMenuVO.getMenuCode()); + + return "itgcms/mngr/menu/mngrContentsUpdate"; + } + + @RequestMapping(value="/_mngr_/menu/mngrContentsView.do") + public String mngrContentsView(@ModelAttribute("mngrMenuVO") MngrMenuVO mngrMenuVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + MngrMenuVO result = mngrMenuService.mngrMenuRegistAjax(mngrMenuVO); + model.addAttribute("result",result); + return "itgcms/mngr/menu/mngrContentsView"; + } + + @RequestMapping(value="/_mngr_/menu/mngrContentsUpdateProc.do") + public String mngrContentsUpdateProc(@ModelAttribute("mngrMenuVO") MngrMenuVO mngrMenuVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + mngrMenuVO.setDelyn("N"); + mngrMenuVO.setMenuCode(mngrMenuVO.getId()); + mngrMenuVO.setRegmemid(CommUtil.getMngrMemId()); + mngrMenuVO.setMenuContents(CommUtil.decodeHTMLTagFilter(mngrMenuVO.getMenuContents())); + mngrMenuService.insertMenuContentsProc(mngrMenuVO); + + return CommUtil.doComplete(model, "완료", "저장되었습니다.", "location.href='/_mngr_/mngrContents/"+mngrMenuVO.getId()+".do'"); + } + + @RequestMapping(value="/_mngr_/menu/mngrMenuAuthTreeList.ajax") + public ModelAndView mngrMenuAuthTreeList(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + MngrSessionVO mngrSessionVO = (MngrSessionVO)session.getAttribute("mngrSessionVO"); + ItgMap licenseVO = CommUtil.getSystemLicenseVO(request, "license"); + String lId = CommUtil.seedDec256(CommUtil.isNull(licenseVO.getValue(0),"")); + + List result = null; + if(mngrSessionVO != null){ + String mngId = mngrSessionVO.getId(); + String authIdx = mngrSessionVO.getAuthority(); + + HashMap hmParam = new HashMap(); + if(lId.equals(mngId)) hmParam.put("act", "super"); + if(mngId != null && authIdx != null){ + hmParam.put("mngId", mngId); + hmParam.put("authIdx", authIdx); + result = mngrMenuService.mngrMenuAuthTreeList(hmParam); + } + } + /* + if("REGIST".equals(mngrMenuVO.getAct())){ + model.addAttribute("result2",result); // 등록시에는 입력항목들에 데이터가 없어야 하는데, 입력항복에 기본으로 result. 으로 돼있어서 result2를 만들어서 입력항목에 값이 안들어가게함 + }else{ + model.addAttribute("result",result); + } + model.addAttribute("searchVO", mngrMenuVO); + model.addAttribute("leftInfo", "contents"); */ + HashMap hm = new HashMap(); + hm.put("result", result); + return new ModelAndView("jsonView", hm); + } + + @RequestMapping(value="/_mngr_/menu/mngrMenuTree.ajax") + @ResponseBody + public List mngrMenuTreeList(HttpSession session, @RequestParam(value="siteCode", required=false) String siteCode) throws IOException, SQLException, RuntimeException { + MngrSessionVO mngrSessionVO = (MngrSessionVO)session.getAttribute("mngrSessionVO"); + List result = null; + if(mngrSessionVO != null){ + String mngId = mngrSessionVO.getId(); + String authIdx = mngrSessionVO.getAuthority(); + + if(mngId != null && authIdx != null){ + Map param = new HashMap<>(); + param.put("mngId", mngId); + param.put("authIdx", authIdx); + param.put("siteCode", siteCode); + result = mngrMenuService.mngrMenuTreeList(param); + } + } + return result; + } + + + @RequestMapping(value = "/_mngr_/mngrContents/{code}.do") + public String mngrContents(@PathVariable String code, ModelMap model, RedirectAttributesModelMap rdMap,HttpServletRequest request, HttpSession session) throws IOException, SQLException, RuntimeException { + + String noticeId = request.getParameter("notice"); + if (noticeId != null && !"".equals(noticeId)) { + code = boardService.redirectNoticePage(noticeId, null).get("menuCode"); + } + + MngrMenuVO menuVO = new MngrMenuVO(); + menuVO.setId(code); + + menuVO = mngrMenuService.mngrMenuView(menuVO); + //String[] menuCode = menuVO.getMenuPfullcode().split(">"); + + String [] postingExternalSiteArr = request.getParameterValues("postingExternalSite"); + + if (postingExternalSiteArr != null && postingExternalSiteArr.length > 0) { + model.addAttribute("externalSite", postingExternalSiteArr); + } + + + model.addAttribute("chkId", request.getParameterValues("chkId")); + model.addAttribute("menuVO", menuVO); + model.addAttribute("sc", code); + if(menuVO != null) model.addAttribute("siteCode", CommUtil.strSplitGet(menuVO.getMenuPfullcode(), "1")); + //model.addAttribute("leftCodeName", menuCode[2]); + + return "itgcms/mngr/_include/mngrContentsTemplate"; + + } + + + + @RequestMapping(value = "/_mngr_/mngrContents/revision/{code}.do") + public String mngrContentsRevision(@PathVariable String code, ModelMap model, HttpServletRequest request, HttpSession session) throws IOException, SQLException, RuntimeException { + + MngrMenuVO menuVO = new MngrMenuVO(); + menuVO.setId(code); + + menuVO = mngrMenuService.mngrMenuView(menuVO); + + menuVO.setMenuType("6"); + menuVO.setMenuCode(code); + + model.addAttribute("menuVO", menuVO); + model.addAttribute("sc", code); + if(menuVO != null) model.addAttribute("siteCode", CommUtil.strSplitGet(menuVO.getMenuPfullcode(), "1")); + //model.addAttribute("leftCodeName", menuCode[2]); + return "itgcms/mngr/_include/mngrContentsTemplate"; + + } + + + + @RequestMapping(value = "/_mngr_/mngrContents/revisionDel/{code}.do") + public String mngrDeleteContentsRevision(@ModelAttribute("searchVO") MngrMenuVO searchVO, @PathVariable("code") String code, ModelMap model, HttpServletRequest request, HttpSession session) throws IOException, SQLException, RuntimeException { + + String[] delIdxArr = request.getParameterValues("chkId"); + searchVO.setRegmemid(((MngrSessionVO)session.getAttribute("mngrSessionVO")).getId()); + searchVO.setMenuCode(code); + searchVO.setDelIdxArr(delIdxArr); + + mngrMenuService.deleteRevision(searchVO, delIdxArr); + + return CommUtil.doComplete(model, "완료", "성공적으로 삭제 되었습니다.", "location.href='/_mngr_/mngrContents/revision/"+code+".do?"+searchVO.getQuery()+"'"); + + } + + + + + /* ########### 페이지 만족도 ########### */ + + @RequestMapping(value = "/_mngr_/menu/mngrMenuSatisfaction.do") + public String mngrMenuSatisfaction(@ModelAttribute("mngrMenuSatisfactionSearchVO") MngrMenuSatisfactionSearchVO mngrMenuSatisfactionSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + List siteList = mngrSiteService.mngrSiteList(); + + if("".equals(CommUtil.isNull(mngrMenuSatisfactionSearchVO.getSchSitecode(), ""))) mngrMenuSatisfactionSearchVO.setSchSitecode("web"); + + List resultList = mngrMenuService.mngrMenuSatisfactionList(mngrMenuSatisfactionSearchVO); + + model.addAttribute("searchVO", mngrMenuSatisfactionSearchVO); + model.addAttribute("siteList", siteList); + model.addAttribute("resultList", resultList); + + return "itgcms/mngr/menu/mngrMenuSatisfaction"; + } + + + @RequestMapping(value = "/_mngr_/menu/mngrMenuSatisfactionView.ajax") + public ModelAndView mngrMenuSatisfactionView(@ModelAttribute("mngrMenuSatisfactionSearchVO") MngrMenuSatisfactionSearchVO mngrMenuSatisfactionSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + List resultList = mngrMenuService.mngrMenuSatisfactionListByMenuCode(mngrMenuSatisfactionSearchVO); + + HashMap hm = new HashMap(); + hm.put("result", resultList); + + return new ModelAndView("jsonView",hm); + } + + + + @RequestMapping(value="/common/sendSatis.do") + public ModelAndView sendSatis(@ModelAttribute("mngrMenuSatisfactionVO") MngrMenuSatisfactionVO mngrMenuSatisfactionVO, HttpServletRequest request) throws IOException, SQLException, RuntimeException{ + HashMap hm = new HashMap(); + + mngrMenuSatisfactionVO.setId(CommUtil.getUserMemId()); + mngrMenuSatisfactionVO.setIp(CommUtil.getClientIP(request)); + + MngrMenuSatisfactionVO resultMenuSatisfactionVO = mngrMenuService.selectMngrMenuSatisfactionView(mngrMenuSatisfactionVO); + hm.put("result", "0"); + hm.put("message", "이미 해당 페이지 만족도에 의견을 남기셨습니다."); + if(resultMenuSatisfactionVO == null){ + mngrMenuService.insertMngrMenuSatisfaction(mngrMenuSatisfactionVO); + hm.put("result", "1"); + hm.put("message", "의견을 남겨주셔서 감사합니다."); + } + return new ModelAndView("jsonView", hm); + } + + + @RequestMapping(value="/_mngr_/menu/contentsTemporarySaveProc.do") + @ResponseBody + public Map contentsTemporarySaveProc(@ModelAttribute("mngrMenuVO") MngrMenuVO mngrMenuVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, RuntimeException { + + Map resultMap = new HashMap<>(); + + mngrMenuVO.setMenuCode(mngrMenuVO.getId()); + mngrMenuVO.setDelyn("T"); + mngrMenuVO.setRegmemid(((MngrSessionVO)request.getSession().getAttribute("mngrSessionVO")).getId()); + + if (mngrMenuService.mngrUpdateMenuTempContents(mngrMenuVO) == 0){ + mngrMenuService.mngrInsertMenuTempContents(mngrMenuVO); + } + + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + resultMap.put("date", formatter.format(new Date())); + resultMap.put("contents", mngrMenuVO.getMenuContents()); + + return resultMap; + } + + @RequestMapping(value="/_mngr_/revision/revisionList.do") + public String revisionListPage(@ModelAttribute("searchVO") MngrMenuVO searchVO, @RequestParam("menuCode") String menuCode, ModelMap model, HttpSession session) throws IOException, SQLException, RuntimeException { + + + searchVO.setPageUnit(Integer.parseInt(searchVO.getViewCount()));//viewCount + searchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(searchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + searchVO.setId(""); + searchVO.setRegmemid(((MngrSessionVO)session.getAttribute("mngrSessionVO")).getId()); + + int totCnt = mngrMenuService.mngrCountRevisionList(searchVO); + List revisionList = mngrMenuService.selectRevisionList(searchVO); + + for (MngrMenuVO vo : revisionList) { + vo.setMenuMemo(vo.getMenuMemo().replaceAll("\\n", " ").replaceAll("\\r", "")); + } + searchVO.setId(menuCode); + String currentNum = mngrMenuService.mngrMenuContentsView(searchVO).getId(); + + model.addAttribute("resultList", revisionList); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("totCnt", totCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("currentNum", currentNum); + model.addAttribute("schStr", searchVO.getSchStr()); + model.addAttribute("menuCode", searchVO.getMenuCode()); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); //페이지 No 의 시작 값 가상의 넘버링 + + + return "itgcms/mngr/menu/mngrRevisionList"; + } + + + @RequestMapping(value="/{root}/revision/{code}/revisionPreview.do") + public String revisionPreview(HttpSession session, ModelMap model, @PathVariable("code") String code, @ModelAttribute MngrMenuVO menuVO) throws IOException, SQLException, RuntimeException{ + + menuVO.setRegmemid(((MngrSessionVO) session.getAttribute("mngrSessionVO")).getId()); + + try { + Integer.parseInt(code); + model.addAttribute("result", mngrMenuService.selectRevisionByIdx(code).getMenuContents()); + }catch(NumberFormatException e) { + menuVO.setMenuCode(code); + model.addAttribute("result", mngrMenuService.getTemporarySaved(menuVO).getMenuContents()); + } + + return "itgcms/mngr/menu/revisionPreview"; + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/itgcms/mngr/popup/web/MngrPopupController.java b/src/main/java/egovframework/itgcms/mngr/popup/web/MngrPopupController.java new file mode 100644 index 0000000..c401556 --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/popup/web/MngrPopupController.java @@ -0,0 +1,208 @@ +package egovframework.itgcms.mngr.popup.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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.multipart.MultipartHttpServletRequest; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.itgcms.core.popup.service.MngrPopupSearchVO; +import egovframework.itgcms.core.popup.service.MngrPopupService; +import egovframework.itgcms.core.popup.service.MngrPopupVO; +import egovframework.itgcms.core.site.service.MngrSiteService; +import egovframework.itgcms.core.site.service.MngrSiteVO; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +/** + * @파일명 : MngrPopupController.java + * @파일정보 : 팝업 등록 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2014. 9. 4. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class MngrPopupController { + + /** MngrPopupService */ + @Resource(name = "mngrPopupService") + private MngrPopupService mngrPopupService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + + /** MngrSiteService */ + @Resource(name = "mngrSiteService") + private MngrSiteService mngrSiteService; + + private static final Logger logger = LogManager.getLogger(MngrPopupController.class); + + @RequestMapping(value = "/_mngr_/popup/mngrPopup.do") + public String mngrPopup(@ModelAttribute("mngrPopupSearchVO") MngrPopupSearchVO mngrPopupSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + + mngrPopupSearchVO.setSchM(CommUtil.isNull(mngrPopupSearchVO.getSchM(), "list")); + model.addAttribute("mngrPopupSearchVO",mngrPopupSearchVO); + + return "itgcms/mngr/popup/mngrPopup"; + } + /** + * 글 목록을 조회한다. (paging) + * @param mngrPopupSearchVO - 조회할 정보가 담긴 PopopSearchVO + * @param model + * @return "itgcms/mngr/popup/_mngr_popupList" + * @exception Exception + */ + @RequestMapping(value = "/_mngr_/popup/mngrPopupList.do") + public String mngrPopupList(@ModelAttribute("searchVO") MngrPopupSearchVO mngrPopupSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + + /** EgovPropertyService */ +/* mngrPopupSearchVO.setPageUnit(propertiesService.getInt("pageUnit")); + mngrPopupSearchVO.setPageSize(propertiesService.getInt("pageSize"));*/ + + mngrPopupSearchVO.setPageUnit(Integer.parseInt(mngrPopupSearchVO.getViewCount()));//viewCount + mngrPopupSearchVO.setPageSize(10);//pageblockcount(<< < 1 2 3 4 5 6 7 8 9 10 > >>) + + int page = Integer.parseInt(mngrPopupSearchVO.getPage()); + /** paging setting */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(page); + paginationInfo.setRecordCountPerPage(mngrPopupSearchVO.getPageUnit()); + paginationInfo.setPageSize(mngrPopupSearchVO.getPageSize()); + + mngrPopupSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + mngrPopupSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + mngrPopupSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List resultList = mngrPopupService.mngrPopupList(mngrPopupSearchVO); + model.addAttribute("resultList", resultList); + int totCnt = mngrPopupService.mngrPopupListTotCnt(mngrPopupSearchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("listNo", (totCnt - ((page - 1)* paginationInfo.getRecordCountPerPage()))); //페이지 No 의 시작 값 가상의 넘버링 + model.addAttribute("POPUP_CONFIG", getConfig(mngrPopupSearchVO.getSchPopupType())); + model.addAttribute("popupTabList", CommUtil.getConfigFromXml("popup")); + model.addAttribute("searchVO", mngrPopupSearchVO); + + return "itgcms/mngr/popup/mngrPopupList"; + } + + @RequestMapping(value = "/_mngr_/popup/mngrPopupRegist.do") + public String mngrPopupRegist(@ModelAttribute("searchVO") MngrPopupSearchVO mngrPopupSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + + mngrPopupSearchVO.setAct("REGIST"); + MngrPopupVO popupVO = new MngrPopupVO(); + popupVO.setPopupSdt(CommUtil.getDatePattern("yyyy-MM-dd")); + popupVO.setPopupEdt(CommUtil.dateAdd(CommUtil.getDatePattern("yyyy-MM-dd"), 30)); + List siteList = mngrSiteService.mngrSiteList(); + model.addAttribute("siteList", siteList); + model.addAttribute("result", popupVO); + model.addAttribute("searchVO", mngrPopupSearchVO); + model.addAttribute("POPUP_CONFIG",getConfig(mngrPopupSearchVO.getSchPopupType())); + + return "itgcms/mngr/popup/mngrPopupRegist"; + } + + @RequestMapping(value = "/_mngr_/popup/mngrPopupView.do") + public String mngrPopupView(@ModelAttribute("searchVO") MngrPopupSearchVO mngrPopupSearchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + + mngrPopupSearchVO.setAct("UPDATE"); + List siteList = mngrSiteService.mngrSiteList(); + model.addAttribute("siteList", siteList); + model.addAttribute("result", mngrPopupService.mngrPopupView(mngrPopupSearchVO)); + model.addAttribute("searchVO", mngrPopupSearchVO); + model.addAttribute("POPUP_CONFIG",getConfig(mngrPopupSearchVO.getSchPopupType())); + + return "itgcms/mngr/popup/mngrPopupRegist"; + } + + @RequestMapping(value = "/_mngr_/popup/mngrPopupRegistProc.do") + public String mngrPopupRegistProc(final MultipartHttpServletRequest multiRequest,@ModelAttribute("searchVO") MngrPopupSearchVO mngrPopupSearchVO, ModelMap model, MngrPopupVO popupVO) throws IOException, SQLException, RuntimeException { + + String divRequired = "required"; + if(mngrPopupSearchVO.getSchPopupType().equals("4")){//모바일 팝업 + divRequired = ""; + } + + // 컨트롤러에서는 파일첨부여부와 이미지인지만 확인 + String errMsg = CommUtil.fileUploadBeforeCheck(multiRequest.getFileMap(), 10240000, "popupImg", "", true, divRequired); + if(!"".equals(errMsg)){return CommUtil.doComplete(model, "오류", errMsg, "history.back();");} + + //impl 에서 데이터 저장 및 파일 첨부 처리 + popupVO.setRegmemid(CommUtil.getMngrMemId()); + mngrPopupService.mngrPopupRegistProc(popupVO, multiRequest); //로직처리는 impl에서(transaction) + model.addAttribute("POPUP_CONFIG",getConfig(mngrPopupSearchVO.getSchPopupType())); + + return CommUtil.doComplete(model, "완료", "등록 되었습니다.", "location.href='?schPopupType="+mngrPopupSearchVO.getSchPopupType()+"'"); + } + + @RequestMapping(value = "/_mngr_/popup/mngrPopupUpdateProc.do") + public String mngrPopupUpdateProc(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") MngrPopupSearchVO mngrPopupSearchVO, ModelMap model, MngrPopupVO popupVO) throws IOException, SQLException, RuntimeException { + + //첨부파일 처리 + // 1. 이미지파일인지, 용량제한에 적합한지 체크 + // 2. 수정시에는 oldFil에 값이 있을경우 첨부하지 않아도 된다. + String errMsg = CommUtil.fileUploadBeforeCheck(multiRequest.getFileMap(), 10240000, "popupImg", "", true, ""); //이미지파일체크, 용량체크 + if(!"".equals(errMsg)){return CommUtil.doComplete(model, "오류", errMsg, "history.back();");} + + //impl 에서 데이터 저장 및 파일 첨부 처리 + // 데이터 저장 처리시에 첨부파일 첨부가 없으면 오류 출력 함 + popupVO.setUpdmemid(CommUtil.getMngrMemId()); + errMsg = mngrPopupService.mngrPopupUpdateProc(popupVO, multiRequest); //로직처리는 impl에서(transaction) + if(!"".equals(errMsg)){return CommUtil.doComplete(model, "오류", errMsg, "history.back();");} + model.addAttribute("POPUP_CONFIG",getConfig(mngrPopupSearchVO.getSchPopupType())); + mngrPopupSearchVO.setSchM("view"); + + return CommUtil.doComplete(model, "완료", "수정 되었습니다.", "location.href='?"+mngrPopupSearchVO.getQuery()+"'"); + } + + @RequestMapping(value = "/_mngr_/popup/mngrPopupDelProc.do") + public String mngrPopupDelProc(@ModelAttribute("searchVO") MngrPopupSearchVO mngrPopupSearchVO, ModelMap model, MngrPopupVO popupVO) throws IOException, SQLException, RuntimeException { + + popupVO.setDelmemid(CommUtil.getMngrMemId()); + mngrPopupService.mngrPopupDelProc(popupVO); + mngrPopupSearchVO.setSchM("list"); + + return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='?"+mngrPopupSearchVO.getQuery()+"'"); + } + + @RequestMapping(value = "/_mngr_/popup/mngrPopupChkDelProc.do") + public String mngrPopupChkDelProc(@ModelAttribute("searchVO") MngrPopupSearchVO mngrPopupSearchVO, ModelMap model, MngrPopupVO popupVO, HttpServletRequest request) throws IOException, SQLException, RuntimeException { + + popupVO.setDelmemid(CommUtil.getMngrMemId()); + mngrPopupService.mngrPopupChkDelProc(popupVO); + mngrPopupSearchVO.setSchM("list"); + + return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='?"+mngrPopupSearchVO.getQuery()+"'"); + } + + private HashMap getConfig(String type) throws IOException, SQLException, RuntimeException { + + HashMap hm = CommUtil.getConfigFromXml("popup", type); + if(hm == null) throw new RuntimeException("팝업 type 오류"); + + return hm; + } +} diff --git a/src/main/java/egovframework/itgcms/mngr/systemconfig/web/MngrSystemconfigController.java b/src/main/java/egovframework/itgcms/mngr/systemconfig/web/MngrSystemconfigController.java new file mode 100644 index 0000000..a691e29 --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/systemconfig/web/MngrSystemconfigController.java @@ -0,0 +1,270 @@ +package egovframework.itgcms.mngr.systemconfig.web; + +import java.io.IOException; +import java.sql.SQLException; +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.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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.multipart.MultipartHttpServletRequest; + +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.common.MngrSessionVO; +import egovframework.itgcms.core.managerlog.service.MngrManagerLogService; +import egovframework.itgcms.core.managerlog.service.MngrManagerLogVO; +//import egovframework.itgcms.core.site.service.MngrSiteSearchVO; +//import egovframework.itgcms.core.site.service.MngrSiteService; +//import egovframework.itgcms.core.site.service.MngrSiteVO; +//import egovframework.itgcms.core.slides.service.MngrSlidesService; +//import egovframework.itgcms.core.social.service.SocialMediaService; +import egovframework.itgcms.core.systemconfig.service.SystemconfigVO; +import egovframework.itgcms.core.templeteconfig.service.TempleteconfigService; +import egovframework.itgcms.util.CommUtil; + +/** + * @파일명 : MngrSystemconfigController.java + * @파일정보 : 시스템 환경설정 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2016. 2. 22. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class MngrSystemconfigController { + + /** MngrSiteService */ +// @Resource(name = "mngrSiteService") +// private MngrSiteService mngrSiteService; + + /** TempleteconfigService */ + @Resource(name = "templeteconfigService") + private TempleteconfigService templeteconfigService; + + /** MngrSlidesService */ +// @Resource(name = "mngrSlidesService") +// private MngrSlidesService mngrSlidesService; +// +// @Resource(name="socialMediaService") +// private SocialMediaService socialMediaService; + + /** MngrAuthorityService */ + @Resource(name = "mngrManagerLogService") + private MngrManagerLogService mngrManagerLogService; + + private static final Logger logger = LogManager.getLogger(MngrSystemconfigController.class); + + @RequestMapping(value = "/_mngr_/systemconfig.do") + public String mngrSystemconfigMain(HttpServletRequest request, ModelMap model, HttpSession session) throws IOException, SQLException, RuntimeException { + + model.addAttribute("mngrSessionVO", (MngrSessionVO)session.getAttribute("mngrSessionVO")); + model.addAttribute("systemconfigVO", CommUtil.getSystemconfigVO(request, "systemconfig")); + + MngrManagerLogVO mngrManagerLogVO = new MngrManagerLogVO(); + mngrManagerLogVO.setMlogClass("egovframework.itgcms.mngr.systemconfig.web.MngrSystemconfigController"); + mngrManagerLogVO.setMlogMethod("mngrSystemconfigMain"); + mngrManagerLogVO.setMlogType("R"); + mngrManagerLogVO.setMngId(CommUtil.getMngrMemId()); + mngrManagerLogVO.setMngName(CommUtil.getMngrSessionVO().getName()); + mngrManagerLogVO.setMlogIp(CommUtil.getClientIP(request)); + mngrManagerLogVO.setMlogReferer(request.getHeader("REFERER")); + mngrManagerLogService.mngrManagerLogInsert(mngrManagerLogVO); + + return "itgcms/mngr/systemconfig/mngrSystemconfigMain"; + } + + @RequestMapping(value = "/_mngr_/systemconfigProc.do") + public String mngrSystemconfigProc(@ModelAttribute("systemconfigVO") SystemconfigVO systemconfigVO, final MultipartHttpServletRequest multiRequest , ModelMap model) throws IOException, SQLException, RuntimeException { + + String oldUnderConstrImg = CommUtil.isNull(multiRequest.getParameter("oldUnderConstrImg"), ""); + + if("1".equals(systemconfigVO.getUnderConstr())){ + // 메인 이미지 파일첨부여부와 이미지인지만 확인 + if("".equals(oldUnderConstrImg)){ + String errMsg = CommUtil.fileUploadBeforeCheck(multiRequest.getFileMap(), 10240000, "underConstrImg", "", true, "required"); + if(!"".equals(errMsg)){return CommUtil.doComplete(model, "오류", errMsg, "history.back();");} + }else{ + String errMsg = CommUtil.fileUploadBeforeCheck(multiRequest.getFileMap(), 10240000, "underConstrImg", "", true, ""); + if(!"".equals(errMsg)){return CommUtil.doComplete(model, "오류", errMsg, "history.back();");} + } + } + + try { + + //파일첨부처리 + if("1".equals(systemconfigVO.getUnderConstr())){ + HashMap hmFile = CommUtil.fileUpload(multiRequest.getFileMap(), "underConstrImg", "system"); + + if(hmFile == null){ + systemconfigVO.setUnderConstrImg(oldUnderConstrImg); + }else{ + systemconfigVO.setUnderConstrImg((String)hmFile.get("F_SAVENAME")); + } + }else{ + systemconfigVO.setUnderConstrImg(oldUnderConstrImg); + } + + } catch (IndexOutOfBoundsException | NullPointerException e) { + return CommUtil.doComplete(model, "오류", "점검중 이미지 첨부 중 오류가 발생하였습니다. \\n다시 시도해주세요.", "history.back();"); + } + + CommUtil.setFileObject(multiRequest, systemconfigVO, "systemconfig"); + + //S: 관리자 로그 기록 시작 + MngrManagerLogVO mngrManagerLogVO = new MngrManagerLogVO(); + mngrManagerLogVO.setMlogClass("egovframework.itgcms.mngr.systemconfig.web.MngrSystemconfigController"); + mngrManagerLogVO.setMlogMethod("mngrSystemconfigProc"); + mngrManagerLogVO.setMlogType("U"); + mngrManagerLogVO.setMngId(CommUtil.getMngrMemId()); + mngrManagerLogVO.setMngName(CommUtil.getMngrSessionVO().getName()); + mngrManagerLogVO.setMlogIp(CommUtil.getClientIP(multiRequest)); + mngrManagerLogVO.setMlogReferer(multiRequest.getHeader("REFERER")); + mngrManagerLogService.mngrManagerLogInsert(mngrManagerLogVO); + //E: 관리자 로그 기록 끝 + + return CommUtil.doComplete(model, "완료", "저장이 완료되었습니다.", "location.href='systemconfig.do';"); + } + + @RequestMapping(value = "/_mngr_/systemconfigSite.do") + public String mngrSystemconfigSite(HttpServletRequest request, ModelMap model) throws IOException, SQLException, RuntimeException { + +// List siteList = mngrSiteService.mngrSiteList(); +// String siteCode = CommUtil.isNull(request.getParameter("siteCode"), ""); +// +// if("".equals(siteCode)){ +// siteCode = siteList.get(0).getSiteCode(); +// } +// MngrSiteSearchVO mngrSiteSearchVO = new MngrSiteSearchVO(); +// mngrSiteSearchVO.setId(siteCode); +// MngrSiteVO mngrSiteVO = mngrSiteService.getSiteView(mngrSiteSearchVO); +// +// List templeteList = templeteconfigService.templeteconfigList(); +// +// ItgMap paramVO = new ItgMap(); +// paramVO.put("useyn", "Y"); +// List slidesList = mngrSlidesService.mngrSlidesList(paramVO); +// +// model.addAttribute("siteCode", siteCode); +// socialMediaService.getSocialMediaUsingKeys(model); +// +// model.addAttribute("mngrSiteVO", mngrSiteVO); +// model.addAttribute("siteList", siteList); +// model.addAttribute("slidesList", slidesList); +// model.addAttribute("templeteList", templeteList); +// model.addAttribute("systemconfigVO", CommUtil.getSystemconfigVO(request, "systemconfig"+siteCode)); +// +// //S: 관리자 로그 기록 시작 +// MngrManagerLogVO mngrManagerLogVO = new MngrManagerLogVO(); +// mngrManagerLogVO.setMlogClass("egovframework.itgcms.mngr.systemconfig.web.MngrSystemconfigController"); +// mngrManagerLogVO.setMlogMethod("mngrSystemconfigSite"); +// mngrManagerLogVO.setMlogType("R"); +// mngrManagerLogVO.setMngId(CommUtil.getMngrMemId()); +// mngrManagerLogVO.setMngName(CommUtil.getMngrSessionVO().getName()); +// mngrManagerLogVO.setMlogIp(CommUtil.getClientIP(request)); +// mngrManagerLogVO.setMlogReferer(request.getHeader("REFERER")); +// mngrManagerLogService.mngrManagerLogInsert(mngrManagerLogVO); +// //E: 관리자 로그 기록 끝 + + return "itgcms/mngr/systemconfig/mngrSystemconfigSite"; + } + + @RequestMapping(value = "/_mngr_/systemconfigSiteProc.do") + public String mngrSystemconfigSiteProc(@ModelAttribute("systemconfigVO") SystemconfigVO systemconfigVO, final MultipartHttpServletRequest multiRequest, ModelMap model) throws IOException, SQLException, RuntimeException { + String siteCode = CommUtil.isNull(multiRequest.getParameter("siteCode"), ""); +// if("".equals(siteCode)){ +// return CommUtil.doComplete(model, "오류", "사이트 정보가 올바르지 않습니다.", "history.back();"); +// } +// +// +// if("2".equals(systemconfigVO.getSiteLogogubun())){ +// // 메인 이미지 파일첨부여부와 이미지인지만 확인 +// if("".equals(systemconfigVO.getOldsiteLogo())){ +// String errMsg = CommUtil.fileUploadBeforeCheck(multiRequest.getFileMap(), 10240000, "siteLogo", "", true, "required"); +// if(!"".equals(errMsg)){return CommUtil.doComplete(model, "오류", errMsg, "history.back();");} +// }else{ +// String errMsg = CommUtil.fileUploadBeforeCheck(multiRequest.getFileMap(), 10240000, "siteLogo", "", true, ""); +// if(!"".equals(errMsg)){return CommUtil.doComplete(model, "오류", errMsg, "history.back();");} +// } +// } +// +// try { +// String[] boardNames = multiRequest.getParameterValues("mainPageBoard"); +// String[] boardLimit = multiRequest.getParameterValues("mainPageBoardLimit"); +// +// +// SystemconfigVO originConf = (SystemconfigVO)CommUtil.getFileObject(multiRequest, "systemconfig"+siteCode); +// +// // 실제 Data 를 가지고 와서 확인 한번 필요 +// Map tmpMap = originConf.getRecentBoardMap(); +// +// String[] boardDesc = new String[boardNames != null ? boardNames.length : 0]; +// for (int i = 0; i < boardDesc.length ; i++) { +// boardDesc[i] = boardNames[i].concat("/").concat(boardLimit[i]); +// } +// +// if (tmpMap == null) { +// tmpMap = new HashMap<>(); +// } +// +// tmpMap.put(systemconfigVO.getTempCode(), boardDesc); +// systemconfigVO.setRecentBoardMap(tmpMap); +// +// } catch (IndexOutOfBoundsException | NullPointerException e) { +// return CommUtil.doComplete(model, "오류", "메인페이지 게시판 설정에 문제가 있습니다. \\n창을 새로고침한 후 다시 시도해주세요.", "history.back();"); +// } +// +// try { +// +// //파일첨부처리 +// if("2".equals(systemconfigVO.getSiteLogogubun())){ +// HashMap hmFile = CommUtil.fileUpload(multiRequest.getFileMap(), "siteLogo", "system"); +// +// if(hmFile == null){ +// systemconfigVO.setSiteLogo(systemconfigVO.getOldsiteLogo()); +// }else{ +// systemconfigVO.setSiteLogo((String)hmFile.get("F_SAVENAME")); +// } +// }else{ +// systemconfigVO.setSiteLogo(systemconfigVO.getOldsiteLogo()); +// } +// +// } catch (IndexOutOfBoundsException | NullPointerException e) { +// return CommUtil.doComplete(model, "오류", "로고이미지 첨부 중 오류가 발생하였습니다. \\n다시 시도해주세요.", "history.back();"); +// } +// +// +// socialMediaService.markAccessible(multiRequest, siteCode); +// +// CommUtil.setFileObject(multiRequest, systemconfigVO, "systemconfig"+siteCode); +// +// //S: 관리자 로그 기록 시작 +// MngrManagerLogVO mngrManagerLogVO = new MngrManagerLogVO(); +// mngrManagerLogVO.setMlogClass("egovframework.itgcms.mngr.systemconfig.web.MngrSystemconfigController"); +// mngrManagerLogVO.setMlogMethod("mngrSystemconfigSiteProc"); +// mngrManagerLogVO.setMlogType("U"); +// mngrManagerLogVO.setMngId(CommUtil.getMngrMemId()); +// mngrManagerLogVO.setMngName(CommUtil.getMngrSessionVO().getName()); +// mngrManagerLogVO.setMlogIp(CommUtil.getClientIP(multiRequest)); +// mngrManagerLogVO.setMlogReferer(multiRequest.getHeader("REFERER")); +// mngrManagerLogService.mngrManagerLogInsert(mngrManagerLogVO); +// //E: 관리자 로그 기록 끝 + + return CommUtil.doComplete(model, "완료", "저장이 완료되었습니다.", "location.href='systemconfigSite.do?siteCode="+siteCode+"';"); + } + + +} \ No newline at end of file diff --git a/src/main/java/egovframework/itgcms/mngr/templeteconfig/web/MngrTempleteconfigController.java b/src/main/java/egovframework/itgcms/mngr/templeteconfig/web/MngrTempleteconfigController.java new file mode 100644 index 0000000..d11efeb --- /dev/null +++ b/src/main/java/egovframework/itgcms/mngr/templeteconfig/web/MngrTempleteconfigController.java @@ -0,0 +1,171 @@ +package egovframework.itgcms.mngr.templeteconfig.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +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 egovframework.itgcms.core.templeteconfig.service.TempleteconfigService; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +/** + * @파일명 : MngrTempleteconfigController.java + * @파일정보 : 템플릿 설정 관리 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @woonee 2017. 4. 04. 최초생성 + * @--------------------------------------- + * @author (주)아이티굿 개발팀 + * @since 2009. 01.14 + * @version 1.0 Copyright (C) ITGOOD All right reserved. + */ + +@Controller +public class MngrTempleteconfigController { + + /** TempleteconfigService */ + @Resource(name = "templeteconfigService") + private TempleteconfigService templeteconfigService; + + private static final Logger logger = LogManager.getLogger(MngrTempleteconfigController.class); + + @RequestMapping(value = "/_mngr_/templeteconfig/templeteconfigList.do") + public String mngrTempleteconfigList(HttpServletRequest request, ModelMap model) throws IOException, SQLException, RuntimeException { + List resultList = templeteconfigService.templeteconfigList(); + int totCnt = templeteconfigService.templeteconfigListTotCnt(); + model.addAttribute("resultList", resultList); + model.addAttribute("listNo", totCnt); + + return "itgcms/mngr/templeteconfig/templeteconfigList"; + } + + /** + * 등록 페이지 + * @param mngrProgramSearchVO + * @param model + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/templeteconfig/templeteconfigRegist.do") + public String mngrTempleteconfigRegist(HttpServletRequest request, ModelMap model) throws IOException, SQLException, RuntimeException { + EgovMap searchVO = new EgovMap(); + searchVO.put("act", "REGIST"); + + model.addAttribute("searchVO", searchVO); + + return "itgcms/mngr/templeteconfig/templeteconfigRegist"; + } + + /** + * 수정/조회 페이지 + * @param mngrProgramSearchVO + * @param model + * @return + * @throws IOException, SQLException, RuntimeException + */ + + @RequestMapping(value = "/_mngr_/templeteconfig/templeteconfigView.do") + public String mngrTempleteconfigView(@RequestParam HashMap map, HttpServletRequest request, ModelMap model) throws IOException, SQLException, RuntimeException { + + EgovMap searchVO = new EgovMap(); + searchVO.putAll(map); + searchVO.put("act", "UPDATE"); + + EgovMap result = templeteconfigService.getTempleteconfig(searchVO); + + model.addAttribute("searchVO", searchVO); + model.addAttribute("result", result); + + return "itgcms/mngr/templeteconfig/templeteconfigRegist"; + } + + /** + * 등록 페이지의 저장 처리 + * @param mngrProgramSearchVO + * @param model + * @param programVO + * @param request + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/templeteconfig/templeteconfigRegistProc.do") + public String templeteconfigRegistProc(@RequestParam HashMap map, HttpServletRequest request, ModelMap model) throws IOException, SQLException, RuntimeException { + + EgovMap paramVO = new EgovMap(); + paramVO.putAll(map); + + //입력 값 유효 체크 + if("".equals( CommUtil.isNull( paramVO.get("tempName") , "") )) return CommUtil.doComplete(model, "오류", "템플릿 이름을 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( paramVO.get("tempCode") , "") )) return CommUtil.doComplete(model, "오류", "템플릿 코드를 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( paramVO.get("recentBdCnt") , "") )) return CommUtil.doComplete(model, "오류", "최근글 영역 개수를 입력 해 주세요.", "history.back();"); + + paramVO.put("regmemid", CommUtil.getMngrMemId()); + + templeteconfigService.templeteconfigRegistProc(paramVO); + + return CommUtil.doComplete(model, "완료", "등록 되었습니다.", "location.href='templeteconfigList.do'"); + } + + /** + * 수정페이지 저장 처리 + * @param mngrProgramSearchVO + * @param model + * @param programVO + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/templeteconfig/templeteconfigUpdateProc.do") + public String templeteconfigUpdateProc(@RequestParam HashMap map, HttpServletRequest request, ModelMap model) throws IOException, SQLException, RuntimeException { + + EgovMap paramVO = new EgovMap(); + paramVO.putAll(map); + + //입력 값 유효 체크 + if("".equals( CommUtil.isNull( paramVO.get("tempIdx") , "") )) return CommUtil.doComplete(model, "오류", "템플릿 정보가 올바르지 않습니다.", "history.back();"); + if("".equals( CommUtil.isNull( paramVO.get("tempName") , "") )) return CommUtil.doComplete(model, "오류", "템플릿 이름을 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( paramVO.get("tempCode") , "") )) return CommUtil.doComplete(model, "오류", "템플릿 코드를 입력 해 주세요.", "history.back();"); + if("".equals( CommUtil.isNull( paramVO.get("recentBdCnt") , "") )) return CommUtil.doComplete(model, "오류", "최근글 영역 개수를 입력 해 주세요.", "history.back();"); + + paramVO.put("updmemid", CommUtil.getMngrMemId()); + + templeteconfigService.templeteconfigUpdateProc(paramVO); + + return CommUtil.doComplete(model, "완료", "수정 되었습니다.", "location.href='templeteconfigList.do'"); + } + + /** + * 삭제페이지 저장 처리 + * @param mngrProgramSearchVO + * @param model + * @param programVO + * @return + * @throws IOException, SQLException, RuntimeException + */ + @RequestMapping(value = "/_mngr_/templeteconfig/templeteconfigDeleteProc.do") + public String templeteconfigDeleteProc(@RequestParam HashMap map, HttpServletRequest request, ModelMap model) throws IOException, SQLException, RuntimeException { + + EgovMap paramVO = new EgovMap(); + paramVO.putAll(map); + + //입력 값 유효 체크 + if("".equals( CommUtil.isNull( paramVO.get("tempIdx") , "") )) return CommUtil.doComplete(model, "오류", "템플릿 정보가 올바르지 않습니다.", "history.back();"); + + paramVO.put("delmemid", CommUtil.getMngrMemId()); + + templeteconfigService.templeteconfigDeleteProc(paramVO); + + return CommUtil.doComplete(model, "완료", "삭제 되었습니다.", "location.href='templeteconfigList.do'"); + } +} \ No newline at end of file diff --git a/src/main/java/egovframework/itgcms/module/link/LinkScheduler.java b/src/main/java/egovframework/itgcms/module/link/LinkScheduler.java new file mode 100644 index 0000000..494f6b9 --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/LinkScheduler.java @@ -0,0 +1,25 @@ +package egovframework.itgcms.module.link; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; +import java.util.Properties; +import javax.annotation.Resource; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import egovframework.com.cmm.service.EgovProperties; +import egovframework.com.cmm.service.Globals; +import egovframework.itgcms.module.link.service.LinkService; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.module.link.service.impl.LinkServiceImpl; +import egovframework.itgcms.util.CommUtil; + +public class LinkScheduler { + + LinkService linkService = (LinkService) CommUtil.getSpringBean("linkService"); + +//배치결과 지우기 - 한달 이전 + public void DEL_BATCH_RESULT() throws SQLException, IOException, InterruptedException { + linkService.deleteBatchResult(); + } +} diff --git a/src/main/java/egovframework/itgcms/module/link/RecvLinkScheduler.java b/src/main/java/egovframework/itgcms/module/link/RecvLinkScheduler.java new file mode 100644 index 0000000..18f5ff2 --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/RecvLinkScheduler.java @@ -0,0 +1,51 @@ +package egovframework.itgcms.module.link; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; +import java.util.Properties; +import javax.annotation.Resource; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import egovframework.com.cmm.service.EgovProperties; +import egovframework.com.cmm.service.Globals; +import egovframework.itgcms.module.link.service.RecvLinkService; +import egovframework.itgcms.module.link.service.LinkService; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.module.link.service.impl.LinkServiceImpl; +import egovframework.itgcms.util.CommUtil; + +public class RecvLinkScheduler { + + RecvLinkService recvLinkService = (RecvLinkService) CommUtil.getSpringBean("recvLinkService"); + +//단속지자체 고농도발령 연계 + public void CEGM_UF_INTF_001() throws SQLException, IOException, InterruptedException { + recvLinkService.cegmUfIntf001("31", "CEGM_UF_INTF_001"); + } + +//친환경 등급 + public void LEZ_CAR_GRADE() throws SQLException, IOException, InterruptedException { + recvLinkService.lezCarGrade("41", "LEZ_CAR_GRADE"); + } + +//친환경 등급 LOT + public void LEZ_CAR_GRADE_LOT() throws SQLException, IOException, InterruptedException { + recvLinkService.lezCarGradeLot("41", "LEZ_CAR_GRADE_LOT"); + } + +//매연저감장치 신청 정보 + public void LEZ_DPF_APPLY() throws SQLException, IOException, InterruptedException { + recvLinkService.lezDpfApply("42", "LEZ_DPF_APPLY"); + } + +//매연저감장치 장착 정보 + public void LEZ_DPF_YN() throws SQLException, IOException, InterruptedException { + recvLinkService.lezDpfYn("43", "LEZ_DPF_YN"); + } + +//ftp connection test + public void FTP_CONNECTION_TEST() throws SQLException, IOException, InterruptedException { +// recvLinkService.ftpConnectionTest(); + } +} diff --git a/src/main/java/egovframework/itgcms/module/link/SFTPUtil.java b/src/main/java/egovframework/itgcms/module/link/SFTPUtil.java new file mode 100644 index 0000000..6303a5e --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/SFTPUtil.java @@ -0,0 +1,431 @@ +package egovframework.itgcms.module.link; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; +import java.util.Vector; + +import javax.annotation.Resource; + +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.stereotype.Service; + +import junit.framework.TestCase; +import com.jcraft.jsch.Channel; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.Session; +import com.jcraft.jsch.SftpATTRS; +import com.jcraft.jsch.SftpException; +import com.jcraft.jsch.ChannelSftp.LsEntry; + +import egovframework.com.cmm.service.Globals; +import egovframework.com.sym.bat.service.BatchJobListener; +import egovframework.itgcms.module.link.service.LinkService; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.module.link.service.RecvLinkService; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +public class SFTPUtil { + + LinkService linkService = (LinkService) CommUtil.getSpringBean("linkService"); + + private static final Logger LOGGER = LoggerFactory.getLogger(BatchJobListener.class); + + public String currentTime(){ + + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss"); + String currentTime = date.format(today)+"["+time.format(today)+"]"; + + return currentTime; + } + + public ChannelSftp connect(String host, int port, String username, String password, String intrfcId) throws SQLException, IOException { + + ChannelSftp sftp = null; + + try { + + JSch jsch = new JSch(); + Session sshSession = jsch.getSession(username, host, port); +// System.out.println("Session created. "); + sshSession.setPassword(password); + Properties sshConfig = new Properties(); + sshConfig.put("StrictHostKeyChecking", "no"); + sshSession.setConfig(sshConfig); + sshSession.connect(); +// System.out.println("Session connected."); +// System.out.println("Opening Channel."); + Channel channel = sshSession.openChannel("sftp"); + channel.connect(); + sftp = (ChannelSftp) channel; + +// System.out.println("Connected to " + host + "."); + + } catch (Exception e) { + + System.out.println("========================================================================"); + System.out.println("SFTP Connection refused"); + System.out.println("Interface ID = "+intrfcId); + System.out.println("Failure Time = "+currentTime()); + System.out.println("========================================================================"); + + LOGGER.error("========================================================================"); + LOGGER.error("SFTP Connection refused"); + LOGGER.error("Interface ID = "+intrfcId); + LOGGER.error("========================================================================"); + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm("-"); + linkVO.setCntcErrorMssage("SFTP Connection refused"); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkService.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + + e.printStackTrace(); + } + + return sftp; + } + + public void disconnect(String host, int port, String username, String password, String intrfcId) throws SQLException, IOException { + +// try { +// +// JSch jsch = new JSch(); +// Session sshSession = jsch.getSession(username, host, port); +// sshSession.setPassword(password); +// sshSession.disconnect(); +// +//// Channel channel = sshSession.openChannel("sftp"); +//// channel.disconnect(); +// +// } catch (Exception e) { +// +// System.out.println("========================================================================"); +// System.out.println("SFTP ENVIRONMENT LINK"); +// System.out.println("Disconnection"); +// System.out.println("Time = "+currentTime()); +// System.out.println("========================================================================"); +// +// e.printStackTrace(); +// } + } + + /** + * Download the file * @param directory * @param downloadFile download directory file download * @param saveFile local path * @param sftp + */ + public void download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) { + + try { + + sftp.cd(directory); + + File file = new File(saveFile); + FileOutputStream fileOutputStream = new FileOutputStream(file); + sftp.get(downloadFile, fileOutputStream ); + sftp.rm(downloadFile);//삭제 + + fileOutputStream.close(); + fileOutputStream = null; + file = null; + + } catch (Exception e) { + + LOGGER.error("========================================================================"); + LOGGER.error("SFTP download refused"); + LOGGER.error("File Name = "+downloadFile); + LOGGER.error("========================================================================"); + + e.printStackTrace(); + } + } + + /** + * Upload file * @param directory upload directory * @param uploadFile file to upload * @param sftp + */ + public void upload(String directory, String uploadFile, ChannelSftp sftp) { + + try { + + sftp.cd(directory); + File file = new File(uploadFile); + FileInputStream fileInputStream = new FileInputStream(file); + + sftp.put(fileInputStream, file.getName()); + fileInputStream.close(); + fileInputStream=null; + + } catch (Exception e) { + + LOGGER.error("========================================================================"); + LOGGER.error("SFTP upload refused"); + LOGGER.error("File Name = "+uploadFile); + LOGGER.error("========================================================================"); + + e.printStackTrace(); + } + } + +// public void testSftp(){ +// ChannelSftp channelSftp = connect(Globals.topisSftpServerIp, Globals.topisSftpServerPort, Globals.topisSftpUserId, Globals.topisSftpUserPw); +// download("ssh-3.2.9.1","FAQ","c://FAQ",channelSftp); +// download("/indigo/temp", "aaa.txt", "C://SFTP", channelSftp); +// download("/romote", "aaa.txt", "C://SFTP/aaa.txt", channelSftp); +// } + + public boolean recvFileSftp(String sftpRecvPath, String locaRecvPath, String InterfaceId) throws SQLException, IOException, JSchException{ + + ChannelSftp channelSftp = connect(Globals.topisSftpServerIp, Globals.topisSftpServerPort, Globals.topisSftpUserId, Globals.topisSftpUserPw, InterfaceId); +// channelSftp.cd("ssh-3.2.9.1"); + + boolean procss = false; + + try { + +// Vector filelist = channelSftp.ls("ssh-3.2.9.1");//remote 경로 + Vector filelist = channelSftp.ls(sftpRecvPath); + +// System.out.println("filelist.size() = "+filelist.size()); + + String fileName = ""; + for(LsEntry entry : filelist){//.eof 파일이 있는지 확인 + if(filelist.size() > 2){ + if(!entry.getFilename().equals(".") && !entry.getFilename().equals("..")){ +// System.out.println("FilenameA = "+entry.getFilename()); +// SftpATTRS attrs = entry.getAttrs(); +// //To obtain permission to read +// System.out.println("getPermissionsString = "+attrs.getPermissionsString()); +// //Gets the time stamp 1 +// System.out.println("getMtimeString = "+attrs.getMtimeString()); +// //Get event +// System.out.println("getAtimeString = "+attrs.getAtimeString()); + fileName = entry.getFilename(); + if(fileName.contains(".eof")){//.eof 파일이 있으면 배치프로세스 시작, 없으면 종료 + procss = true; + } + } + } + } + + if(procss){//.eof 파일이 있으면 프로세스 진행 + + String eofFileNames[] = new String[filelist.size()]; + int eofCnt = 0; + for(LsEntry entry : filelist){//.eof 파일 목록을 만든다. + if(filelist.size() > 2){ + if(!entry.getFilename().equals(".") && !entry.getFilename().equals("..")){ + if(entry.getFilename().contains(".eof")){//.eof 파일 + eofFileNames[eofCnt] = entry.getFilename().substring(0, entry.getFilename().lastIndexOf(".eof")); + eofCnt++; + } +// System.out.println("filenameB = "+entry.getFilename()); +// download(sftpRecvPath, entry.getFilename(), locaRecvPath+entry.getFilename(), channelSftp); + } + } + } + + for(int i=0; i 0){//.csv 파일이 있을때 + for(LsEntry entry : filelist){ + if(entry.getFilename().contains(eofFileNames[i].substring(0, 8))){//.eof 파일과 이름이 같은 .csv 파일만 추출해서 다운로드 +// System.out.println("getFilename = "+entry.getFilename()); + download(sftpRecvPath, entry.getFilename(), locaRecvPath+entry.getFilename(), channelSftp); + } + } + } + } + +// for(LsEntry entry : filelist){ +// if(filelist.size() > 2){ +// if(!entry.getFilename().equals(".") && !entry.getFilename().equals("..")){ +//// System.out.println("filenameB = "+entry.getFilename()); +// download(sftpRecvPath, entry.getFilename(), locaRecvPath+entry.getFilename(), channelSftp); +//// download("/remote/41", entry.getFilename(), "C:/Docu/link/qtpa/indigo/DATA/RECV/41/"+entry.getFilename(), channelSftp); +// } +// } +// } + } else { + + System.out.println("========================================================================"); + System.out.println("SFTP Recv_file does not exist"); + System.out.println("Interface ID = "+InterfaceId); + System.out.println("Connection Time = "+currentTime()); + System.out.println("========================================================================"); + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(InterfaceId); + linkVO.setCntcFileNm("-"); + linkVO.setCntcErrorMssage("Recv Process Success : Recv_file does not exist"); + linkVO.setCntcSuccesAt("Y"); + linkVO.setCntcCnfirmAt("N"); + linkVO.setCntcErrorLineco(0); + linkService.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + + } catch (SftpException e) { + + LOGGER.error("========================================================================"); + LOGGER.error("SFTP recvFileSftp refused"); + LOGGER.error("Interface ID = "+InterfaceId); + LOGGER.error("========================================================================"); + + e.printStackTrace(); + } + + channelSftp.getSession().disconnect(); + + return procss; + } + + public boolean sendFileSftp(String sftpSendPath, String locaSendPath, String InterfaceId) throws SQLException, IOException, JSchException{ + + ChannelSftp channelSftp = connect(Globals.topisSftpServerIp, Globals.topisSftpServerPort, Globals.topisSftpUserId, Globals.topisSftpUserPw, InterfaceId); +// channelSftp.cd("ssh-3.2.9.1"); + + boolean procss = false; + + try { + + File dirFile = new File(locaSendPath); + File []fileList = dirFile.listFiles(); + String tempPath = ""; + String fileName = ""; + int fileMatchCnt = 0; + + for(File tempFile : fileList) {//옮기기 전 폴더 읽기 + if(tempFile.isFile()) { + tempPath = tempFile.getParent(); + fileName = tempFile.getName(); +// System.out.println("tempPath = "+tempPath); +// System.out.println("sftpSendPath = "+sftpSendPath); +// System.out.println("fullname = "+locaSendPath+fileName); + upload(sftpSendPath, locaSendPath+fileName, channelSftp); + } + } + + int localFileSize = fileList.length;//local 갯수 + + Vector sftpFilelist = channelSftp.ls(sftpSendPath); + + //sftp 와 local의 이름이 같은 파일 갯수 + for(LsEntry entry : sftpFilelist){//sftp + for(File tempFile : fileList) {//local + if(tempFile.isFile()) { + fileName = tempFile.getName(); + } + if(entry.getFilename().equals(fileName)){ + fileMatchCnt++; + } + } + } + + if(localFileSize == fileMatchCnt){//보내는 파일이 전달 된 파일 갯수가 같은때 true + procss = true; + } + + for(LsEntry entry : sftpFilelist){//sftp .eof파일 삭제 + if(entry.getFilename().contains(".eof")){ + channelSftp.rm(entry.getFilename()); + } + } + } catch (SftpException e) { + + LOGGER.error("========================================================================"); + LOGGER.error("SFTP sendFileSftp refused"); + LOGGER.error("Interface ID = "+InterfaceId); + LOGGER.error("========================================================================"); + + e.printStackTrace(); + } + + channelSftp.getSession().disconnect(); + +// channelSftp.disconnect(); +// disconnect(Globals.topisSftpServerIp, Globals.topisSftpServerPort, Globals.topisSftpUserId, Globals.topisSftpUserPw, InterfaceId); + + return procss; + } + + public void ftpConnection() { + +// FTPClient client = null; +// +// // 계정 로그인 +// try { +// client = new FTPClient(); +// +// // 한글파일명 때문에 디폴트 인코딩을 euc-kr로 한다. +// client.setControlEncoding("euc-kr"); +// +// // Test 서버 정보 +//// logger.info("Commons NET FTP Client Test Program"); +//// logger.info("Start GO"); +// System.out.println("Commons NET FTP Client Test Program"); +// System.out.println("Start GO"); +// +// // Novell TEST서버에 접속 +// client.connect("98.33.1.174"); +//// client.connect("192.168.0.163"); +//// logger.info("Connected to ||||||||||||||||||||||..........."); +// System.out.println("Connected to ||||||||||||||||||||||..........."); +// +// // 응답코드가 비정상일 경우 종료함 +// int reply = client.getReplyCode(); +// if (!FTPReply.isPositiveCompletion(reply)) { +// client.disconnect(); +//// logger.info("FTP server refused connection"); +// System.out.println("FTP server refused connection"); +// +// } else { +//// logger.info(client.getReplyString()); +// System.out.println(client.getReplyString()); +// +// // timeout을 설정 +// client.setSoTimeout(10000); +// // 로그인 +// client.login("traffic1", "ryxhd$%1"); +//// client.login("indigo", "indigo"); +// +//// logger.info("anonymous login success..."); +// System.out.println("anonymous login success..."); +// +// // 각종 정보를 처리 (Put / Get / Append등) +// client.logout(); +// } +// +// } catch (Exception e) { +//// logger.info("해당 ftp 로그인 실패하였습니다."); +// System.out.println("해당 ftp 로그인 실패하였습니다."); +// e.printStackTrace(); +//// System.exit(-1); +// } finally { +// if(client != null && client.isConnected()){ +// try { +// client.disconnect(); +// }catch(IOException ioe) { +// ioe.printStackTrace(); +// } +// } +// } + } +} diff --git a/src/main/java/egovframework/itgcms/module/link/SFTPUtil2.java b/src/main/java/egovframework/itgcms/module/link/SFTPUtil2.java new file mode 100644 index 0000000..b3ff506 --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/SFTPUtil2.java @@ -0,0 +1,314 @@ +package egovframework.itgcms.module.link; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; +import java.util.Vector; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import junit.framework.TestCase; +import com.jcraft.jsch.Channel; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.Session; +import com.jcraft.jsch.SftpATTRS; +import com.jcraft.jsch.SftpException; +import com.jcraft.jsch.ChannelSftp.LsEntry; + +import egovframework.com.cmm.service.Globals; +import egovframework.itgcms.module.link.service.LinkService; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.module.link.service.RecvLinkService; +import egovframework.itgcms.util.CommUtil; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +public class SFTPUtil2 { + +// LinkService linkService = (LinkService) CommUtil.getSpringBean("linkService"); +// +// public String currentTime(){ +// +// Date today = new Date(); +// SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd"); +// SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss"); +// String currentTime = date.format(today)+"["+time.format(today)+"]"; +// +// return currentTime; +// } +// +// public ChannelSftp connect(String host, int port, String username, String password, String intrfcId) throws SQLException, IOException { +// +// ChannelSftp sftp = null; +// +// try { +// +// JSch jsch = new JSch(); +// Session sshSession = jsch.getSession(username, host, port); +//// System.out.println("Session created. "); +// sshSession.setPassword(password); +// Properties sshConfig = new Properties(); +// sshConfig.put("StrictHostKeyChecking", "no"); +// sshSession.setConfig(sshConfig); +// sshSession.connect(); +//// System.out.println("Session connected."); +//// System.out.println("Opening Channel."); +// Channel channel = sshSession.openChannel("sftp"); +// channel.connect(); +// sftp = (ChannelSftp) channel; +// System.out.println("Connected to " + host + "."); +// +// } catch (Exception e) { +// +// System.out.println("========================================================================"); +// System.out.println("SFTP ENVIRONMENT LINK"); +// System.out.println("Connection Failure"); +// System.out.println("Interface ID = "+intrfcId); +// System.out.println("Failure Time = "+currentTime()); +// System.out.println("========================================================================"); +// +// LinkVO linkVO = new LinkVO(); +// linkVO.setIntrfcId(intrfcId); +// linkVO.setCntcErrorMssage("Sftp - Connection Failure"); +// linkService.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 +// +// e.printStackTrace(); +// } +// +// return sftp; +// } +// +// public void disconnect(String host, int port, String username, String password, String intrfcId) throws SQLException, IOException { +// +// try { +// +// JSch jsch = new JSch(); +// Session sshSession = jsch.getSession(username, host, port); +// sshSession.setPassword(password); +// sshSession.disconnect(); +// +// Channel channel = sshSession.openChannel("sftp"); +// channel.disconnect(); +// +// } catch (Exception e) { +// +// System.out.println("========================================================================"); +// System.out.println("SFTP ENVIRONMENT LINK"); +// System.out.println("Disconnection"); +// System.out.println("Time = "+currentTime()); +// System.out.println("========================================================================"); +// +// e.printStackTrace(); +// } +// } +// +// /** +// * Download the file * @param directory * @param downloadFile download directory file download * @param saveFile local path * @param sftp +// */ +// public void download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) { +// +// try { +// +// sftp.cd(directory); +// +// File file = new File(saveFile); +// FileOutputStream fileOutputStream = new FileOutputStream(file); +// sftp.get(downloadFile, fileOutputStream ); +// sftp.rm(downloadFile);//삭제 +// +// fileOutputStream.close(); +// fileOutputStream = null; +// file = null; +// +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// +// /** +// * Upload file * @param directory upload directory * @param uploadFile file to upload * @param sftp +// */ +// public void upload(String directory, String uploadFile, ChannelSftp sftp) { +// +// try { +// +// sftp.cd(directory); +// File file = new File(uploadFile); +// FileInputStream fileInputStream = new FileInputStream(file); +// sftp.put(fileInputStream, file.getName()); +// fileInputStream.close(); +// fileInputStream=null; +// +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// +//// public void testSftp(){ +//// ChannelSftp channelSftp = connect(Globals.topisSftpServerIp, Globals.topisSftpServerPort, Globals.topisSftpUserId, Globals.topisSftpUserPw); +//// download("ssh-3.2.9.1","FAQ","c://FAQ",channelSftp); +//// download("/indigo/temp", "aaa.txt", "C://SFTP", channelSftp); +//// download("/romote", "aaa.txt", "C://SFTP/aaa.txt", channelSftp); +//// } +// +// public boolean recvFileSftp(String sftpRecvPath, String locaRecvPath, String InterfaceId) throws SQLException, IOException{ +// +// ChannelSftp channelSftp = connect(Globals.topisSftpServerIp, Globals.topisSftpServerPort, Globals.topisSftpUserId, Globals.topisSftpUserPw, InterfaceId); +// +//// channelSftp.cd("ssh-3.2.9.1"); +// +// boolean procss = false; +// +// try { +// +//// Vector filelist = channelSftp.ls("ssh-3.2.9.1");//remote 경로 +// Vector filelist = channelSftp.ls(sftpRecvPath); +// +//// System.out.println("filelist.size() = "+filelist.size()); +// +// String fileName = ""; +// for(LsEntry entry : filelist){//.eof 파일이 있는지 확인 +// if(filelist.size() > 2){ +// if(!entry.getFilename().equals(".") && !entry.getFilename().equals("..")){ +//// System.out.println("FilenameA = "+entry.getFilename()); +//// SftpATTRS attrs = entry.getAttrs(); +//// //To obtain permission to read +//// System.out.println("getPermissionsString = "+attrs.getPermissionsString()); +//// //Gets the time stamp 1 +//// System.out.println("getMtimeString = "+attrs.getMtimeString()); +//// //Get event +//// System.out.println("getAtimeString = "+attrs.getAtimeString()); +// fileName = entry.getFilename(); +// if(fileName.contains(".eof")){//.eof 파일이 있으면 배치프로세스 시작, 없으면 종료 +// procss = true; +// } +// } +// } +// } +// +// if(procss){//.eof 파일이 있으면 프로세스 진행 +// +// String eofFileNames[] = new String[filelist.size()]; +// int eofCnt = 0; +// for(LsEntry entry : filelist){//.eof 파일 목록을 만든다. +// if(filelist.size() > 2){ +// if(!entry.getFilename().equals(".") && !entry.getFilename().equals("..")){ +// if(entry.getFilename().contains(".eof")){//.eof 파일 +// eofFileNames[eofCnt] = entry.getFilename().substring(0, entry.getFilename().lastIndexOf(".eof")); +// eofCnt++; +// } +//// System.out.println("filenameB = "+entry.getFilename()); +//// download(sftpRecvPath, entry.getFilename(), locaRecvPath+entry.getFilename(), channelSftp); +// } +// } +// } +// +// for(int i=0; i 0){//.csv 파일이 있을때 +// for(LsEntry entry : filelist){ +// if(entry.getFilename().contains(eofFileNames[i])){//.eof 파일과 이름이 같은 .csv 파일만 추출해서 다운로드 +//// System.out.println("getFilename = "+entry.getFilename()); +// download(sftpRecvPath, entry.getFilename(), locaRecvPath+entry.getFilename(), channelSftp); +// } +// } +// } +// } +// +//// for(LsEntry entry : filelist){ +//// if(filelist.size() > 2){ +//// if(!entry.getFilename().equals(".") && !entry.getFilename().equals("..")){ +////// System.out.println("filenameB = "+entry.getFilename()); +//// download(sftpRecvPath, entry.getFilename(), locaRecvPath+entry.getFilename(), channelSftp); +////// download("/remote/41", entry.getFilename(), "C:/Docu/link/qtpa/indigo/DATA/RECV/41/"+entry.getFilename(), channelSftp); +//// } +//// } +//// } +// } else { +// +// System.out.println("========================================================================"); +// System.out.println("SFTP ENVIRONMENT LINK"); +// System.out.println("THE RECV_FILE DOES NOT EXIST"); +// System.out.println("Interface ID = "+InterfaceId); +// System.out.println("Connection Time = "+currentTime()); +// System.out.println("========================================================================"); +// } +// +// } catch (SftpException e) { +// e.printStackTrace(); +// } +// +// channelSftp.disconnect(); +// disconnect(Globals.topisSftpServerIp, Globals.topisSftpServerPort, Globals.topisSftpUserId, Globals.topisSftpUserPw, InterfaceId); +// +// return procss; +// } +// +// public boolean sendFileSftp(String sftpSendPath, String locaSendPath, String InterfaceId) throws SQLException, IOException{ +// +// ChannelSftp channelSftp = connect(Globals.topisSftpServerIp, Globals.topisSftpServerPort, Globals.topisSftpUserId, Globals.topisSftpUserPw, InterfaceId); +//// channelSftp.cd("ssh-3.2.9.1"); +// +// boolean procss = false; +// +// try { +// +// File dirFile = new File(locaSendPath); +// File []fileList = dirFile.listFiles(); +// String tempPath = ""; +// String fileName = ""; +// int fileMatchCnt = 0; +// +// for(File tempFile : fileList) {//옮기기 전 폴더 읽기 +// if(tempFile.isFile()) { +// tempPath = tempFile.getParent(); +// fileName = tempFile.getName(); +//// System.out.println("Path = "+tempPath); +//// System.out.println("fileName = "+fileName); +// upload(sftpSendPath, locaSendPath+fileName, channelSftp); +// } +// } +// +// int localFileSize = fileList.length;//local 갯수 +// +// Vector sftpFilelist = channelSftp.ls(sftpSendPath); +// +// //sftp 와 local의 이름이 같은 파일 갯수 +// for(LsEntry entry : sftpFilelist){//sftp +// for(File tempFile : fileList) {//local +// if(tempFile.isFile()) { +// fileName = tempFile.getName(); +// } +// if(entry.getFilename().equals(fileName)){ +// fileMatchCnt++; +// } +// } +// } +// +// if(localFileSize == fileMatchCnt){//보내는 파일과 전달 된 파일 갯수가 같을때 true +// procss = true; +// } +// +// } catch (SftpException e) { +// e.printStackTrace(); +// } +// +// channelSftp.disconnect(); +// disconnect(Globals.topisSftpServerIp, Globals.topisSftpServerPort, Globals.topisSftpUserId, Globals.topisSftpUserPw, InterfaceId); +// +// return procss; +// } + +} diff --git a/src/main/java/egovframework/itgcms/module/link/SendLinkScheduler.java b/src/main/java/egovframework/itgcms/module/link/SendLinkScheduler.java new file mode 100644 index 0000000..bb6b20c --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/SendLinkScheduler.java @@ -0,0 +1,58 @@ +package egovframework.itgcms.module.link; + +import java.io.IOException; +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Properties; +import javax.annotation.Resource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import egovframework.com.cmm.service.EgovProperties; +import egovframework.com.cmm.service.Globals; +import egovframework.itgcms.module.link.service.RecvLinkService; +import egovframework.itgcms.module.link.service.LinkService; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.module.link.service.SendLinkService; +import egovframework.itgcms.module.link.service.SendLinkVO; +import egovframework.itgcms.module.link.service.impl.LinkMapper; +import egovframework.itgcms.module.link.service.impl.LinkServiceImpl; +import egovframework.itgcms.module.link.service.impl.SendLinkMapper; +import egovframework.itgcms.util.CommUtil; + +public class SendLinkScheduler { + + SendLinkService sendLinkService = (SendLinkService) CommUtil.getSpringBean("sendLinkService"); + + @Resource(name="sendLinkMapper") + private SendLinkMapper sendLinkMapper; + +//단속자료 송신 + public void LEZ_DISCLOSURE() throws SQLException, IOException, InterruptedException { + sendLinkService.lezDisclosure("08", "LEZ_DISCLOSURE"); + } + +//카메라 상태 정보 + public void LEZ_CAMERA_STATUS() throws SQLException, IOException, InterruptedException { + sendLinkService.lezCameraStatus("09", "LEZ_CAMERA_STATUS"); + } + +//촬영차량 전일 정보 + public void LEZ_RTVI_YDAY_LANE_TRAFFIC() throws SQLException, IOException, InterruptedException { + sendLinkService.lezRtviYdayLaneTraffic("13", "LEZ_RTVI_YDAY_LANE_TRAFFIC"); + } + +//통계용 데이터 정보 + public void LEZ_RTVI_WEEK_LANE_TRAFFIC() throws Exception { + sendLinkService.lezRtviWeekLaneTraffic("14", "LEZ_RTVI_WEEK_LANE_TRAFFIC"); + } + +//차량번호 일괄송신 +// public void LEZ_NUMPLATE_ALL() throws SQLException, IOException, InterruptedException { +// sendLinkService.lezNumplateAll("49"); +// } +} diff --git a/src/main/java/egovframework/itgcms/module/link/service/LinkService.java b/src/main/java/egovframework/itgcms/module/link/service/LinkService.java new file mode 100644 index 0000000..c955fee --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/service/LinkService.java @@ -0,0 +1,18 @@ +package egovframework.itgcms.module.link.service; + +import java.io.IOException; +import java.sql.SQLException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.ui.ModelMap; +import org.springframework.web.servlet.ModelAndView; + +public interface LinkService { + +//배치결과 지우기 - 한달 이전 + void deleteBatchResult() throws SQLException, IOException; + + void insertTbFisCntcErrorManage(LinkVO linkVO) throws SQLException, IOException; +} diff --git a/src/main/java/egovframework/itgcms/module/link/service/LinkVO.java b/src/main/java/egovframework/itgcms/module/link/service/LinkVO.java new file mode 100644 index 0000000..e50210e --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/service/LinkVO.java @@ -0,0 +1,661 @@ +package egovframework.itgcms.module.link.service; + +import java.io.IOException; +import java.io.Serializable; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.itgcms.common.DefaultVO; +import egovframework.itgcms.util.CommUtil; + +public class LinkVO extends DefaultVO implements Serializable { + + private static final long serialVersionUID = -8854151716958649397L; + private static final Logger logger = LogManager.getLogger(LinkVO.class); + private String posesnLinkIdx = ""; + private String posesnIdx = ""; + private String vhmno = ""; + private String vhcleNoChangeAt = ""; + private String mberNoChangeAt = ""; + private String mrtgLinkIdx = ""; + private String mrtgIdx = ""; + private String ownerNm = ""; + private String debtrNm = ""; + private String mrtgEstbsDe = ""; + private String mrtgErsrDe = ""; + private String totCditAmount = ""; + private String rpLinkIdx = ""; + private String rpIdx = ""; + private String vhcleNo = ""; + private String vin = ""; + private String rpEntNm = ""; + private String rpEntTelno = ""; + private String rpRspnber = ""; + private String rpHist = ""; + private String rpComptDe = ""; + private String shrtcomLinkIdx = ""; + private String shrtcomIdx = ""; + private String prdctnBegdt = ""; + private String prdctnEnddt = ""; + private String corecBegdt = ""; + private String corecEnddt = ""; + private String deviceCl = ""; + private String corecMth = ""; + private String regdt = ""; + private String readYn = ""; + private String delyn = ""; + private String searchCondition = ""; + private String searchKeyword = ""; + private String query = ""; + private String excelDown = ""; + private String page = "1"; + private String viewCount = "10"; + private String schOption = ""; + private String schDateFrom = ""; + private String schDate = ""; + private String schDateEnd = ""; + private String cntOption = ""; + private String cntYear = ""; + private String cntMonth = ""; + private String startDate = ""; + private String endDate = ""; + private String cntDate = ""; + private int cntSum; + private int cntPosesn; + private int cntMortgage; + private int cntRepair; + private int cntShrtcom; + private String single = ""; + private String shrtcomLinkIdx2 = ""; + private String mngDocNo = ""; + private String recallBeginDt = ""; + private String recallTitle = ""; + private String recallDfctDes = ""; + private String totRecallCnt = ""; + private String mberNo = ""; + + //TB_FIS_CNTC_ERROR_MANAGE - 연계 오류 관리 + private String intrfcId = ""; + private String vhcleManageNo = ""; +// private String vin = ""; +// private String vhcleNo = ""; + private String cntcFileNm = ""; + private String cntcErrorColumn = ""; + private String cntcErrorMssage = ""; + private int cntcErrorLineco = 0; + private String cntcSuccesAt = ""; + private String cntcCnfirmAt = ""; + + public String getPosesnIdx() { + return posesnIdx; + } + + public String getCntcCnfirmAt() { + return cntcCnfirmAt; + } + + public void setCntcCnfirmAt(String cntcCnfirmAt) { + this.cntcCnfirmAt = cntcCnfirmAt; + } + + public String getCntcSuccesAt() { + return cntcSuccesAt; + } + + public void setCntcSuccesAt(String cntcSuccesAt) { + this.cntcSuccesAt = cntcSuccesAt; + } + + public void setPosesnIdx(String posesnIdx) { + this.posesnIdx = posesnIdx; + } + + public String getVhmno() { + return vhmno; + } + + public void setVhmno(String vhmno) { + this.vhmno = vhmno; + } + + public String getVhcleNoChangeAt() { + return vhcleNoChangeAt; + } + + public void setVhcleNoChangeAt(String vhcleNoChangeAt) { + this.vhcleNoChangeAt = vhcleNoChangeAt; + } + + public String getMberNoChangeAt() { + return mberNoChangeAt; + } + + public void setMberNoChangeAt(String mberNoChangeAt) { + this.mberNoChangeAt = mberNoChangeAt; + } + + public String getMrtgIdx() { + return mrtgIdx; + } + + public void setMrtgIdx(String mrtgIdx) { + this.mrtgIdx = mrtgIdx; + } + + public String getOwnerNm() { + return ownerNm; + } + + public void setOwnerNm(String ownerNm) { + this.ownerNm = ownerNm; + } + + public String getDebtrNm() { + return debtrNm; + } + + public void setDebtrNm(String debtrNm) { + this.debtrNm = debtrNm; + } + + public String getMrtgEstbsDe() { + return mrtgEstbsDe; + } + + public void setMrtgEstbsDe(String mrtgEstbsDe) { + this.mrtgEstbsDe = mrtgEstbsDe; + } + + public String getMrtgErsrDe() { + return mrtgErsrDe; + } + + public void setMrtgErsrDe(String mrtgErsrDe) { + this.mrtgErsrDe = mrtgErsrDe; + } + + public String getTotCditAmount() { + return totCditAmount; + } + + public void setTotCditAmount(String totCditAmount) { + this.totCditAmount = totCditAmount; + } + + public String getRpIdx() { + return rpIdx; + } + + public void setRpIdx(String rpIdx) { + this.rpIdx = rpIdx; + } + + public String getVhcleNo() { + return vhcleNo; + } + + public void setVhcleNo(String vhcleNo) { + this.vhcleNo = vhcleNo; + } + + public String getVin() { + return vin; + } + + public void setVin(String vin) { + this.vin = vin; + } + + public String getRpEntNm() { + return rpEntNm; + } + + public void setRpEntNm(String rpEntNm) { + this.rpEntNm = rpEntNm; + } + + public String getRpEntTelno() { + return rpEntTelno; + } + + public void setRpEntTelno(String rpEntTelno) { + this.rpEntTelno = rpEntTelno; + } + + public String getRpRspnber() { + return rpRspnber; + } + + public void setRpRspnber(String rpRspnber) { + this.rpRspnber = rpRspnber; + } + + public String getRpHist() { + return rpHist; + } + + public void setRpHist(String rpHist) { + this.rpHist = rpHist; + } + + public String getRpComptDe() { + return rpComptDe; + } + + public void setRpComptDe(String rpComptDe) { + this.rpComptDe = rpComptDe; + } + + public String getShrtcomIdx() { + return shrtcomIdx; + } + + public void setShrtcomIdx(String shrtcomIdx) { + this.shrtcomIdx = shrtcomIdx; + } + + public String getPrdctnBegdt() { + return prdctnBegdt; + } + + public void setPrdctnBegdt(String prdctnBegdt) { + this.prdctnBegdt = prdctnBegdt; + } + + public String getPrdctnEnddt() { + return prdctnEnddt; + } + + public void setPrdctnEnddt(String prdctnEnddt) { + this.prdctnEnddt = prdctnEnddt; + } + + public String getCorecBegdt() { + return corecBegdt; + } + + public void setCorecBegdt(String corecBegdt) { + this.corecBegdt = corecBegdt; + } + + public String getCorecEnddt() { + return corecEnddt; + } + + public void setCorecEnddt(String corecEnddt) { + this.corecEnddt = corecEnddt; + } + + public String getDeviceCl() { + return deviceCl; + } + + public void setDeviceCl(String deviceCl) { + this.deviceCl = deviceCl; + } + + public String getCorecMth() { + return corecMth; + } + + public void setCorecMth(String corecMth) { + this.corecMth = corecMth; + } + + public String getRegdt() { + return regdt; + } + + public void setRegdt(String regdt) { + this.regdt = regdt; + } + + public String getReadYn() { + return readYn; + } + + public void setReadYn(String readYn) { + this.readYn = readYn; + } + + public String getDelyn() { + return delyn; + } + + public void setDelyn(String delyn) { + this.delyn = delyn; + } + + 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 getSchOption() { + return schOption; + } + + public void setSchOption(String schOption) { + this.schOption = schOption; + } + + public String getSchDateFrom() { + return schDateFrom; + } + + public void setSchDateFrom(String schDateFrom) { + this.schDateFrom = schDateFrom; + } + + public String getSchDateEnd() { + return schDateEnd; + } + + public void setSchDateEnd(String schDateEnd) { + this.schDateEnd = schDateEnd; + } + + public String getCntOption() { + return cntOption; + } + + public void setCntOption(String cntOption) { + this.cntOption = cntOption; + } + + public String getStartDate() { + return startDate; + } + + public void setStartDate(String startDate) { + this.startDate = startDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } + + public String getCntDate() { + return cntDate; + } + + public void setCntDate(String cntDate) { + this.cntDate = cntDate; + } + + public int getCntSum() { + return cntSum; + } + + public void setCntSum(int cntSum) { + this.cntSum = cntSum; + } + + public int getCntPosesn() { + return cntPosesn; + } + + public void setCntPosesn(int cntPosesn) { + this.cntPosesn = cntPosesn; + } + + public int getCntMortgage() { + return cntMortgage; + } + + public void setCntMortgage(int cntMortgage) { + this.cntMortgage = cntMortgage; + } + + public int getCntRepair() { + return cntRepair; + } + + public void setCntRepair(int cntRepair) { + this.cntRepair = cntRepair; + } + + public int getCntShrtcom() { + return cntShrtcom; + } + + public void setCntShrtcom(int cntShrtcom) { + this.cntShrtcom = cntShrtcom; + } + + public String getQuery() { + try{ + if(!"".equals(java.net.URLEncoder.encode(this.searchCondition, "UTF-8"))){ query += "&searchCondition=" + java.net.URLEncoder.encode(this.searchCondition, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.searchKeyword, "UTF-8"))){ query += "&searchKeyword=" + java.net.URLEncoder.encode(this.searchKeyword, "UTF-8");} + if(!"".equals(java.net.URLEncoder.encode(this.page, "UTF-8"))){ query += "&page=" + java.net.URLEncoder.encode(this.page, "UTF-8");} + }catch(IOException e){ + logger.error("예외 상황 발생"); + } + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + public static long getSerialversionuid() { + return serialVersionUID; + } + + public String getExcelDown() { + return excelDown; + } + + public void setExcelDown(String excelDown) { + this.excelDown = excelDown; + } + + public String getPage() { + return page; + } + + public void setPage(String page) { + if(!"".equals(CommUtil.isNull(page, "")) + && !CommUtil.regEx("[^0-9]", page) //빈값 또는 0-9중의 숫자가 아닌경우 전달받은 변수를 대입하지 않는다(기본값을 그냥 사용) + ){ + this.page = page; + } + } + + public String getViewCount() { + return viewCount; + } + + public void setViewCount(String viewCount) { + if(!"".equals(CommUtil.isNull(viewCount, "")) + && !CommUtil.regEx("[^0-9]", viewCount) //빈값 또는 0-9중의 숫자가 아닌경우 전달받은 변수를 대입하지 않는다(기본값을 그냥 사용) + ){ + this.viewCount = viewCount; + } + } + + public String getSchDate() { + return schDate; + } + + public void setSchDate(String schDate) { + this.schDate = schDate; + } + + public String getCntYear() { + return cntYear; + } + + public void setCntYear(String cntYear) { + this.cntYear = cntYear; + } + + public String getCntMonth() { + return cntMonth; + } + + public void setCntMonth(String cntMonth) { + this.cntMonth = cntMonth; + } + + public String getPosesnLinkIdx() { + return posesnLinkIdx; + } + + public void setPosesnLinkIdx(String posesnLinkIdx) { + this.posesnLinkIdx = posesnLinkIdx; + } + + public String getMrtgLinkIdx() { + return mrtgLinkIdx; + } + + public void setMrtgLinkIdx(String mrtgLinkIdx) { + this.mrtgLinkIdx = mrtgLinkIdx; + } + + public String getRpLinkIdx() { + return rpLinkIdx; + } + + public void setRpLinkIdx(String rpLinkIdx) { + this.rpLinkIdx = rpLinkIdx; + } + + public String getShrtcomLinkIdx() { + return shrtcomLinkIdx; + } + + public void setShrtcomLinkIdx(String shrtcomLinkIdx) { + this.shrtcomLinkIdx = shrtcomLinkIdx; + } + + public String getSingle() { + return single; + } + + public void setSingle(String single) { + this.single = single; + } + + public String getShrtcomLinkIdx2() { + return shrtcomLinkIdx2; + } + + public void setShrtcomLinkIdx2(String shrtcomLinkIdx2) { + this.shrtcomLinkIdx2 = shrtcomLinkIdx2; + } + + public String getMngDocNo() { + return mngDocNo; + } + + public void setMngDocNo(String mngDocNo) { + this.mngDocNo = mngDocNo; + } + + public String getRecallBeginDt() { + return recallBeginDt; + } + + public void setRecallBeginDt(String recallBeginDt) { + this.recallBeginDt = recallBeginDt; + } + + public String getRecallTitle() { + return recallTitle; + } + + public void setRecallTitle(String recallTitle) { + this.recallTitle = recallTitle; + } + + public String getRecallDfctDes() { + return recallDfctDes; + } + + public void setRecallDfctDes(String recallDfctDes) { + this.recallDfctDes = recallDfctDes; + } + + public String getTotRecallCnt() { + return totRecallCnt; + } + + public void setTotRecallCnt(String totRecallCnt) { + this.totRecallCnt = totRecallCnt; + } + + public String getMberNo() { + return mberNo; + } + + public void setMberNo(String mberNo) { + this.mberNo = mberNo; + } + + public String getIntrfcId() { + return intrfcId; + } + + public void setIntrfcId(String intrfcId) { + this.intrfcId = intrfcId; + } + + public String getVhcleManageNo() { + return vhcleManageNo; + } + + public void setVhcleManageNo(String vhcleManageNo) { + this.vhcleManageNo = vhcleManageNo; + } + + public String getCntcFileNm() { + return cntcFileNm; + } + + public void setCntcFileNm(String cntcFileNm) { + this.cntcFileNm = cntcFileNm; + } + + public String getCntcErrorColumn() { + return cntcErrorColumn; + } + + public void setCntcErrorColumn(String cntcErrorColumn) { + this.cntcErrorColumn = cntcErrorColumn; + } + + public String getCntcErrorMssage() { + return cntcErrorMssage; + } + + public void setCntcErrorMssage(String cntcErrorMssage) { + this.cntcErrorMssage = cntcErrorMssage; + } + + public int getCntcErrorLineco() { + return cntcErrorLineco; + } + + public void setCntcErrorLineco(int cntcErrorLineco) { + this.cntcErrorLineco = cntcErrorLineco; + } +} diff --git a/src/main/java/egovframework/itgcms/module/link/service/RecvLinkService.java b/src/main/java/egovframework/itgcms/module/link/service/RecvLinkService.java new file mode 100644 index 0000000..e281fb2 --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/service/RecvLinkService.java @@ -0,0 +1,31 @@ +package egovframework.itgcms.module.link.service; + +import java.io.IOException; +import java.sql.SQLException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.ui.ModelMap; +import org.springframework.web.servlet.ModelAndView; + +public interface RecvLinkService { + +//단속지자체 고농도발령 연계 + void cegmUfIntf001(String seatNumber, String intrfcId) throws SQLException, IOException; + +//친환경 등급 + void lezCarGrade(String seatNumber, String intrfcId) throws SQLException, IOException; + +//친환경 등급 + void lezCarGradeLot(String seatNumber, String intrfcId) throws SQLException, IOException; + +//매연저감장치 신청 정보 + void lezDpfApply(String seatNumber, String intrfcId) throws SQLException, IOException; + +//매연저감장치 장착 정보 + void lezDpfYn(String seatNumber, String intrfcId) throws SQLException, IOException; + +//ftp connection test + void ftpConnectionTest() throws SQLException, IOException; +} diff --git a/src/main/java/egovframework/itgcms/module/link/service/RecvLinkVO.java b/src/main/java/egovframework/itgcms/module/link/service/RecvLinkVO.java new file mode 100644 index 0000000..d353eaa --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/service/RecvLinkVO.java @@ -0,0 +1,402 @@ +package egovframework.itgcms.module.link.service; + +import java.io.IOException; +import java.io.Serializable; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.itgcms.common.DefaultVO; +import egovframework.itgcms.util.CommUtil; + +public class RecvLinkVO extends DefaultVO implements Serializable { + +// private static final long serialVersionUID = -8854151716958649397L; + +// private static final Logger logger = LogManager.getLogger(RecvLinkVO.class); + +//단속지자체 고농도발령 연계 + private String hghdnstyGnfdNo = ""; + private String cmmndTy = ""; + private String cmmndTime = ""; + private String hghdnstyGnfdNm = ""; + private String pdDtaco = ""; + private String vhcleDtaco = ""; + private String areaDtaco = ""; + private String applcDe = ""; + private String registDt = ""; + private String gnfdBgndeman = ""; + private String gnfdEnddeman = ""; + private String gnfdRegltBegintime = ""; + private String gnfdRegltEndtime = ""; + private String carRegNo = ""; + private String hghdnstyRegltArea = ""; + private String hghdnstyAreaSe = ""; +//친환경 등급 + private String vhcleManageNo = ""; + private String vhcleNo = ""; + private String vin = ""; + private String usgsrhldLegaldongCode = ""; + private String ownerSe = ""; + private String evrfrndGradVhcty = ""; + private String evrfrndGradPrpos = ""; + private String ownerNm = ""; + private String usgsrhldAdres = ""; + private String ownerAdres = ""; + private String yridnw = ""; + private String vhcleMnfctDe = ""; + private String exhstgasGrad = ""; + private String rescueChangeAt = ""; + private String usgsrhldZip = ""; + private String registErsrAt = ""; + private String evrfrndGradChangeSe = ""; + private String evrfrndGradChangeDe = ""; + private String evrfrndGradHistProcessAt = ""; + private String evrfrndGradHistProcessMssa = ""; + private String creatDt = ""; + private String updtDt = ""; +//저감장치 신청정보 + private String brthdy = ""; + private String tlphonNo = ""; + private String moblphonNo = ""; + private String brwdnm = ""; + private String lowpolutnManagtMth = ""; + private String reqstDe = ""; + private String reducdeviceReqstChangeSe = ""; + private String reducdeviceReqstChangeDe = ""; + private String reducdeviceReqstProcessAt = ""; + private String reducdeviceReqstProcessMssa = ""; +//저감장치 장착정보 + private String reducdeviceMntngChangeSe = ""; + private String reducdeviceMntngChangeDe = ""; + private String mntngDe = ""; + private String reducdeviceDeleteAt = ""; + private String reducdeviceMntngProcessAt = ""; + private String reducdeviceMntngProcessMssa = ""; + + public String getApplcDe() { + return applcDe; + } + public void setApplcDe(String applcDe) { + this.applcDe = applcDe; + } + public String getRegistDt() { + return registDt; + } + public void setRegistDt(String registDt) { + this.registDt = registDt; + } + public String getGnfdBgndeman() { + return gnfdBgndeman; + } + public void setGnfdBgndeman(String gnfdBgndeman) { + this.gnfdBgndeman = gnfdBgndeman; + } + public String getGnfdEnddeman() { + return gnfdEnddeman; + } + public void setGnfdEnddeman(String gnfdEnddeman) { + this.gnfdEnddeman = gnfdEnddeman; + } + public String getGnfdRegltBegintime() { + return gnfdRegltBegintime; + } + public void setGnfdRegltBegintime(String gnfdRegltBegintime) { + this.gnfdRegltBegintime = gnfdRegltBegintime; + } + public String getGnfdRegltEndtime() { + return gnfdRegltEndtime; + } + public void setGnfdRegltEndtime(String gnfdRegltEndtime) { + this.gnfdRegltEndtime = gnfdRegltEndtime; + } + public String getHghdnstyRegltArea() { + return hghdnstyRegltArea; + } + public void setHghdnstyRegltArea(String hghdnstyRegltArea) { + this.hghdnstyRegltArea = hghdnstyRegltArea; + } + public String getHghdnstyAreaSe() { + return hghdnstyAreaSe; + } + public void setHghdnstyAreaSe(String hghdnstyAreaSe) { + this.hghdnstyAreaSe = hghdnstyAreaSe; + } + public String getCarRegNo() { + return carRegNo; + } + public void setCarRegNo(String carRegNo) { + this.carRegNo = carRegNo; + } + public String getHghdnstyGnfdNo() { + return hghdnstyGnfdNo; + } + public void setHghdnstyGnfdNo(String hghdnstyGnfdNo) { + this.hghdnstyGnfdNo = hghdnstyGnfdNo; + } + public String getCmmndTy() { + return cmmndTy; + } + public void setCmmndTy(String cmmndTy) { + this.cmmndTy = cmmndTy; + } + public String getCmmndTime() { + return cmmndTime; + } + public void setCmmndTime(String cmmndTime) { + this.cmmndTime = cmmndTime; + } + public String getHghdnstyGnfdNm() { + return hghdnstyGnfdNm; + } + public void setHghdnstyGnfdNm(String hghdnstyGnfdNm) { + this.hghdnstyGnfdNm = hghdnstyGnfdNm; + } + public String getPdDtaco() { + return pdDtaco; + } + public void setPdDtaco(String pdDtaco) { + this.pdDtaco = pdDtaco; + } + public String getVhcleDtaco() { + return vhcleDtaco; + } + public void setVhcleDtaco(String vhcleDtaco) { + this.vhcleDtaco = vhcleDtaco; + } + public String getAreaDtaco() { + return areaDtaco; + } + public void setAreaDtaco(String areaDtaco) { + this.areaDtaco = areaDtaco; + } + public String getVhcleManageNo() { + return vhcleManageNo; + } + public void setVhcleManageNo(String vhcleManageNo) { + this.vhcleManageNo = vhcleManageNo; + } + public String getVhcleNo() { + return vhcleNo; + } + public void setVhcleNo(String vhcleNo) { + this.vhcleNo = vhcleNo; + } + public String getVin() { + return vin; + } + public void setVin(String vin) { + this.vin = vin; + } + public String getUsgsrhldLegaldongCode() { + return usgsrhldLegaldongCode; + } + public void setUsgsrhldLegaldongCode(String usgsrhldLegaldongCode) { + this.usgsrhldLegaldongCode = usgsrhldLegaldongCode; + } + public String getOwnerSe() { + return ownerSe; + } + public void setOwnerSe(String ownerSe) { + this.ownerSe = ownerSe; + } + public String getEvrfrndGradVhcty() { + return evrfrndGradVhcty; + } + public void setEvrfrndGradVhcty(String evrfrndGradVhcty) { + this.evrfrndGradVhcty = evrfrndGradVhcty; + } + public String getEvrfrndGradPrpos() { + return evrfrndGradPrpos; + } + public void setEvrfrndGradPrpos(String evrfrndGradPrpos) { + this.evrfrndGradPrpos = evrfrndGradPrpos; + } + public String getOwnerNm() { + return ownerNm; + } + public void setOwnerNm(String ownerNm) { + this.ownerNm = ownerNm; + } + public String getUsgsrhldAdres() { + return usgsrhldAdres; + } + public void setUsgsrhldAdres(String usgsrhldAdres) { + this.usgsrhldAdres = usgsrhldAdres; + } + public String getOwnerAdres() { + return ownerAdres; + } + public void setOwnerAdres(String ownerAdres) { + this.ownerAdres = ownerAdres; + } + public String getYridnw() { + return yridnw; + } + public void setYridnw(String yridnw) { + this.yridnw = yridnw; + } + public String getVhcleMnfctDe() { + return vhcleMnfctDe; + } + public void setVhcleMnfctDe(String vhcleMnfctDe) { + this.vhcleMnfctDe = vhcleMnfctDe; + } + public String getExhstgasGrad() { + return exhstgasGrad; + } + public void setExhstgasGrad(String exhstgasGrad) { + this.exhstgasGrad = exhstgasGrad; + } + public String getRescueChangeAt() { + return rescueChangeAt; + } + public void setRescueChangeAt(String rescueChangeAt) { + this.rescueChangeAt = rescueChangeAt; + } + public String getUsgsrhldZip() { + return usgsrhldZip; + } + public void setUsgsrhldZip(String usgsrhldZip) { + this.usgsrhldZip = usgsrhldZip; + } + public String getRegistErsrAt() { + return registErsrAt; + } + public void setRegistErsrAt(String registErsrAt) { + this.registErsrAt = registErsrAt; + } + public String getEvrfrndGradChangeSe() { + return evrfrndGradChangeSe; + } + public void setEvrfrndGradChangeSe(String evrfrndGradChangeSe) { + this.evrfrndGradChangeSe = evrfrndGradChangeSe; + } + public String getEvrfrndGradChangeDe() { + return evrfrndGradChangeDe; + } + public void setEvrfrndGradChangeDe(String evrfrndGradChangeDe) { + this.evrfrndGradChangeDe = evrfrndGradChangeDe; + } + public String getEvrfrndGradHistProcessAt() { + return evrfrndGradHistProcessAt; + } + public void setEvrfrndGradHistProcessAt(String evrfrndGradHistProcessAt) { + this.evrfrndGradHistProcessAt = evrfrndGradHistProcessAt; + } + public String getCreatDt() { + return creatDt; + } + public void setCreatDt(String creatDt) { + this.creatDt = creatDt; + } + public String getUpdtDt() { + return updtDt; + } + public void setUpdtDt(String updtDt) { + this.updtDt = updtDt; + } + public String getBrthdy() { + return brthdy; + } + public void setBrthdy(String brthdy) { + this.brthdy = brthdy; + } + public String getTlphonNo() { + return tlphonNo; + } + public void setTlphonNo(String tlphonNo) { + this.tlphonNo = tlphonNo; + } + public String getMoblphonNo() { + return moblphonNo; + } + public void setMoblphonNo(String moblphonNo) { + this.moblphonNo = moblphonNo; + } + public String getBrwdnm() { + return brwdnm; + } + public void setBrwdnm(String brwdnm) { + this.brwdnm = brwdnm; + } + public String getLowpolutnManagtMth() { + return lowpolutnManagtMth; + } + public void setLowpolutnManagtMth(String lowpolutnManagtMth) { + this.lowpolutnManagtMth = lowpolutnManagtMth; + } + public String getReqstDe() { + return reqstDe; + } + public void setReqstDe(String reqstDe) { + this.reqstDe = reqstDe; + } + public String getReducdeviceReqstChangeSe() { + return reducdeviceReqstChangeSe; + } + public void setReducdeviceReqstChangeSe(String reducdeviceReqstChangeSe) { + this.reducdeviceReqstChangeSe = reducdeviceReqstChangeSe; + } + public String getReducdeviceReqstChangeDe() { + return reducdeviceReqstChangeDe; + } + public void setReducdeviceReqstChangeDe(String reducdeviceReqstChangeDe) { + this.reducdeviceReqstChangeDe = reducdeviceReqstChangeDe; + } + public String getReducdeviceMntngChangeSe() { + return reducdeviceMntngChangeSe; + } + public void setReducdeviceMntngChangeSe(String reducdeviceMntngChangeSe) { + this.reducdeviceMntngChangeSe = reducdeviceMntngChangeSe; + } + public String getReducdeviceMntngChangeDe() { + return reducdeviceMntngChangeDe; + } + public void setReducdeviceMntngChangeDe(String reducdeviceMntngChangeDe) { + this.reducdeviceMntngChangeDe = reducdeviceMntngChangeDe; + } + public String getMntngDe() { + return mntngDe; + } + public void setMntngDe(String mntngDe) { + this.mntngDe = mntngDe; + } + public String getReducdeviceDeleteAt() { + return reducdeviceDeleteAt; + } + public void setReducdeviceDeleteAt(String reducdeviceDeleteAt) { + this.reducdeviceDeleteAt = reducdeviceDeleteAt; + } + public String getReducdeviceMntngProcessAt() { + return reducdeviceMntngProcessAt; + } + public void setReducdeviceMntngProcessAt(String reducdeviceMntngProcessAt) { + this.reducdeviceMntngProcessAt = reducdeviceMntngProcessAt; + } + public String getReducdeviceReqstProcessAt() { + return reducdeviceReqstProcessAt; + } + public void setReducdeviceReqstProcessAt(String reducdeviceReqstProcessAt) { + this.reducdeviceReqstProcessAt = reducdeviceReqstProcessAt; + } + public String getEvrfrndGradHistProcessMssa() { + return evrfrndGradHistProcessMssa; + } + public void setEvrfrndGradHistProcessMssa(String evrfrndGradHistProcessMssa) { + this.evrfrndGradHistProcessMssa = evrfrndGradHistProcessMssa; + } + public String getReducdeviceReqstProcessMssa() { + return reducdeviceReqstProcessMssa; + } + public void setReducdeviceReqstProcessMssa(String reducdeviceReqstProcessMssa) { + this.reducdeviceReqstProcessMssa = reducdeviceReqstProcessMssa; + } + public String getReducdeviceMntngProcessMssa() { + return reducdeviceMntngProcessMssa; + } + public void setReducdeviceMntngProcessMssa(String reducdeviceMntngProcessMssa) { + this.reducdeviceMntngProcessMssa = reducdeviceMntngProcessMssa; + } +} diff --git a/src/main/java/egovframework/itgcms/module/link/service/SendLinkService.java b/src/main/java/egovframework/itgcms/module/link/service/SendLinkService.java new file mode 100644 index 0000000..048c6d6 --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/service/SendLinkService.java @@ -0,0 +1,37 @@ +package egovframework.itgcms.module.link.service; + +import java.io.IOException; +import java.sql.SQLException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.ui.ModelMap; +import org.springframework.web.servlet.ModelAndView; + +public interface SendLinkService { + +//sftpSend + void sftpSend(String seatNumber, String folderNumber, String logicNm, String eofFileName, int listCnt) throws SQLException, IOException; + +//sftpSendImg + void sftpSendImg(String seatNumber, String folderNumber, String intrfcId, String eofFileName, int totFileCnt, int totImgCnt) throws SQLException, IOException; + +//imgTransfer + void imgTransfer(String seatNumber, String folderNumber, String intrfcId, String eofFileName, int totFileCnt) throws SQLException, IOException; + +//단속자료 송신 + void lezDisclosure(String seatNumber, String intrfcId) throws SQLException, IOException; + +//카메라 상태 정보 + void lezCameraStatus(String seatNumber, String intrfcId) throws SQLException, IOException; + +//촬영차량 전일 정보 + void lezRtviYdayLaneTraffic(String seatNumber, String intrfcId) throws SQLException, IOException; + +//통계용 데이터 정보 + void lezRtviWeekLaneTraffic(String seatNumber, String intrfcId) throws SQLException, IOException; + +//차량번호 일괄송신 +// void lezNumplateAll(String seatNumber) throws SQLException, IOException; +} diff --git a/src/main/java/egovframework/itgcms/module/link/service/SendLinkVO.java b/src/main/java/egovframework/itgcms/module/link/service/SendLinkVO.java new file mode 100644 index 0000000..ab119d2 --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/service/SendLinkVO.java @@ -0,0 +1,190 @@ +package egovframework.itgcms.module.link.service; + +import java.io.IOException; +import java.io.Serializable; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import egovframework.com.cmm.ComDefaultVO; +import egovframework.itgcms.common.DefaultVO; +import egovframework.itgcms.util.CommUtil; + +public class SendLinkVO extends DefaultVO implements Serializable { + +// private static final long serialVersionUID = -8854151716958649397L; + + private int firstIndex = 0; + private int recordCountPerPage = 0; + +//단속자료 송신 + private String regltId = ""; + private String seasonNo = ""; + private String sidoCd = ""; + private String sigunguCd = ""; + private String vin = ""; + private String laneId = ""; + private String regltDt = ""; + private String vhcleNo = ""; + private String regltPhotoCours = ""; + private String vhcleImageCours = ""; + private String regltPhotoNm = ""; + private String creatDt = ""; +//카메라 상태 정보 +// private String sidoCd = ""; + private String sigunCd = ""; + private String cameraId = ""; + private String applyDt = ""; + private String cameraStatus = ""; + private String regDt = ""; +//촬영차량 전일 정보 +// private String sidoCd = ""; +// private String sigunguCd = ""; +// private String laneId = ""; +// private String applyDt = ""; + private String totalCount = ""; +// private String regltDt = ""; +// 통계용 데이터 정보 + private String statsExtrcDe = ""; + private String statsBeginDe = ""; + private String statsEndDe = ""; + + public String getStatsExtrcDe() { + return statsExtrcDe; + } + public void setStatsExtrcDe(String statsExtrcDe) { + this.statsExtrcDe = statsExtrcDe; + } + public String getStatsBeginDe() { + return statsBeginDe; + } + public void setStatsBeginDe(String statsBeginDe) { + this.statsBeginDe = statsBeginDe; + } + public String getStatsEndDe() { + return statsEndDe; + } + public void setStatsEndDe(String statsEndDe) { + this.statsEndDe = statsEndDe; + } + public String getSigunCd() { + return sigunCd; + } + public String getTotalCount() { + return totalCount; + } + public void setTotalCount(String totalCount) { + this.totalCount = totalCount; + } + public void setSigunCd(String sigunCd) { + this.sigunCd = sigunCd; + } + public String getApplyDt() { + return applyDt; + } + public void setApplyDt(String applyDt) { + this.applyDt = applyDt; + } + public String getCameraStatus() { + return cameraStatus; + } + public void setCameraStatus(String cameraStatus) { + this.cameraStatus = cameraStatus; + } + public String getRegDt() { + return regDt; + } + public void setRegDt(String regDt) { + this.regDt = regDt; + } + public String getRegltId() { + return regltId; + } + public void setRegltId(String regltId) { + this.regltId = regltId; + } + public String getVin() { + return vin; + } + public void setVin(String vin) { + this.vin = vin; + } + public String getRegltPhotoCours() { + return regltPhotoCours; + } + public void setRegltPhotoCours(String regltPhotoCours) { + this.regltPhotoCours = regltPhotoCours; + } + public String getRegltPhotoNm() { + return regltPhotoNm; + } + public void setRegltPhotoNm(String regltPhotoNm) { + this.regltPhotoNm = regltPhotoNm; + } + public String getSeasonNo() { + return seasonNo; + } + public void setSeasonNo(String seasonNo) { + this.seasonNo = seasonNo; + } + public String getSidoCd() { + return sidoCd; + } + public void setSidoCd(String sidoCd) { + this.sidoCd = sidoCd; + } + public String getSigunguCd() { + return sigunguCd; + } + public void setSigunguCd(String sigunguCd) { + this.sigunguCd = sigunguCd; + } + public String getLaneId() { + return laneId; + } + public void setLaneId(String laneId) { + this.laneId = laneId; + } + public String getRegltDt() { + return regltDt; + } + public void setRegltDt(String regltDt) { + this.regltDt = regltDt; + } + public int getFirstIndex() { + return firstIndex; + } + public void setFirstIndex(int firstIndex) { + this.firstIndex = firstIndex; + } + public int getRecordCountPerPage() { + return recordCountPerPage; + } + public void setRecordCountPerPage(int recordCountPerPage) { + this.recordCountPerPage = recordCountPerPage; + } + public String getCameraId() { + return cameraId; + } + public void setCameraId(String cameraId) { + this.cameraId = cameraId; + } + public String getVhcleNo() { + return vhcleNo; + } + public void setVhcleNo(String vhcleNo) { + this.vhcleNo = vhcleNo; + } + public String getVhcleImageCours() { + return vhcleImageCours; + } + public void setVhcleImageCours(String vhcleImageCours) { + this.vhcleImageCours = vhcleImageCours; + } + public String getCreatDt() { + return creatDt; + } + public void setCreatDt(String creatDt) { + this.creatDt = creatDt; + } +} diff --git a/src/main/java/egovframework/itgcms/module/link/service/impl/LinkMapper.java b/src/main/java/egovframework/itgcms/module/link/service/impl/LinkMapper.java new file mode 100644 index 0000000..027e400 --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/service/impl/LinkMapper.java @@ -0,0 +1,18 @@ +package egovframework.itgcms.module.link.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.module.link.service.RecvLinkVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +@Mapper("linkMapper") +public interface LinkMapper { + +//배치결과 지우기 - 한달 이전 + int deleteBatchResult() throws SQLException; + + int insertTbFisCntcErrorManage(LinkVO linkVO) throws SQLException; +} diff --git a/src/main/java/egovframework/itgcms/module/link/service/impl/LinkServiceImpl.java b/src/main/java/egovframework/itgcms/module/link/service/impl/LinkServiceImpl.java new file mode 100644 index 0000000..cde2850 --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/service/impl/LinkServiceImpl.java @@ -0,0 +1,71 @@ +package egovframework.itgcms.module.link.service.impl; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Vector; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Service; +import org.springframework.ui.ModelMap; +import org.springframework.web.servlet.ModelAndView; + +import com.jcraft.jsch.Logger; + +import egovframework.com.utl.sim.service.EgovFileTool; +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigVO; +import egovframework.itgcms.core.menu.service.MngrMenuVO; +import egovframework.itgcms.module.link.service.RecvLinkVO; +import egovframework.itgcms.module.link.service.LinkService; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.util.Client; +import egovframework.itgcms.util.CommUtil; +import egovframework.itgcms.util.ExcelDownloadView; +import egovframework.itgcms.util.NewGpkiUtil; +import egovframework.itgcms.util.ShareGpki; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +@Service("linkService") +public class LinkServiceImpl extends EgovAbstractServiceImpl implements LinkService { + + @Resource(name="linkMapper") + private LinkMapper linkMapper; + + public LinkServiceImpl() {} + + public LinkServiceImpl(boolean flag) { + if(linkMapper == null) { + linkMapper = (LinkMapper) CommUtil.getSpringBean("linkMapper"); + } + } + +//배치결과 지우기 - 한달 이전 + @Override + public void deleteBatchResult() throws SQLException, IOException { + linkMapper.deleteBatchResult(); + } + + @Override + public void insertTbFisCntcErrorManage(LinkVO linkVO) throws SQLException, IOException { + linkMapper.insertTbFisCntcErrorManage(linkVO); + } +} diff --git a/src/main/java/egovframework/itgcms/module/link/service/impl/RecvLinkMapper.java b/src/main/java/egovframework/itgcms/module/link/service/impl/RecvLinkMapper.java new file mode 100644 index 0000000..582014c --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/service/impl/RecvLinkMapper.java @@ -0,0 +1,94 @@ +package egovframework.itgcms.module.link.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.module.link.service.RecvLinkVO; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.module.link.service.SendLinkVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +@Mapper("recvLinkMapper") +public interface RecvLinkMapper { + +//단속지자체 고농도발령 연계 + int deleteCegmUfIntf001_1st(RecvLinkVO recvLinkHistVO) throws SQLException; + + int insertCegmUfIntf001_1st(RecvLinkVO recvLinkHistVO) throws SQLException; + + int insertCegmUfIntf001_Hist_1st(RecvLinkVO recvLinkVO) throws SQLException; + + int deleteCegmUfIntf001_2nd(RecvLinkVO recvLinkHistVO) throws SQLException; + + int insertCegmUfIntf001_2nd(RecvLinkVO recvLinkHistVO) throws SQLException; + + int insertCegmUfIntf001_Hist_2nd(RecvLinkVO recvLinkVO) throws SQLException; + + int deleteCegmUfIntf001_4th(RecvLinkVO recvLinkHistVO) throws SQLException; + + int insertCegmUfIntf001_4th(RecvLinkVO recvLinkHistVO) throws SQLException; + + int insertCegmUfIntf001_Hist_4th(RecvLinkVO recvLinkVO) throws SQLException; + + int insertCegmUfIntf001_Error(RecvLinkVO recvLinkVO) throws SQLException;//에러자료 + +//친환경 등급 + int insertTbFisEvrfrndGrad_Once(RecvLinkVO recvLinkVO) throws SQLException;//최초1회 + + int insertTbFisEvrfrndGrad_Hist(RecvLinkVO recvLinkVO) throws SQLException; + + List selectTbFisEvrfrndGrad_HistList(RecvLinkVO recvLinkVO) throws SQLException; + + int selectTbFisEvrfrndGrad_Cnt(RecvLinkVO recvLinkVO) throws SQLException; + + int insertTbFisEvrfrndGrad(RecvLinkVO recvLinkHistVO) throws SQLException; + + int updateTbFisEvrfrndGrad(RecvLinkVO recvLinkHistVO) throws SQLException; + + int deleteTbFisEvrfrndGrad(RecvLinkVO recvLinkHistVO) throws SQLException; + + int updateTbFisEvrfrndGrad_Hist(RecvLinkVO recvLinkHistVO) throws SQLException; + + int insertTbFisEvrfrndGrad_Error(RecvLinkVO recvLinkVO) throws SQLException;//에러자료 + +//저감장치 장착 신청정보 + int insertTbFisReducdeviceReqst_Once(RecvLinkVO recvLinkVO) throws SQLException;//최초1회 + + int insertTbFisReducdeviceReqst_Hist(RecvLinkVO recvLinkVO) throws SQLException; + + List selectTbFisReducdeviceReqst_HistList(RecvLinkVO recvLinkVO) throws SQLException; + + int selectTbFisReducdeviceReqst_Cnt(RecvLinkVO recvLinkVO) throws SQLException; + + int insertTbFisReducdeviceReqst(RecvLinkVO recvLinkHistVO) throws SQLException; + + int updateTbFisReducdeviceReqst(RecvLinkVO recvLinkHistVO) throws SQLException; + + int deleteTbFisReducdeviceReqst(RecvLinkVO recvLinkHistVO) throws SQLException; + + int updateTbFisReducdeviceReqst_Hist(RecvLinkVO recvLinkHistVO) throws SQLException; + + int insertTbFisReducdeviceReqst_Error(RecvLinkVO recvLinkVO) throws SQLException;//에러자료 + +//저감장치 장착정보 + int insertTbFisReducdeviceMntng_Once(RecvLinkVO recvLinkVO) throws SQLException;//최초1회 + + int insertTbFisReducdeviceMntng_Hist(RecvLinkVO recvLinkVO) throws SQLException; + + List selectTbFisReducdeviceMntng_HistList(RecvLinkVO recvLinkVO) throws SQLException; + + int selectTbFisReducdeviceMntng_Cnt(RecvLinkVO recvLinkVO) throws SQLException; + + int insertTbFisReducdeviceMntng(RecvLinkVO recvLinkHistVO) throws SQLException; + + int updateTbFisReducdeviceMntng(RecvLinkVO recvLinkHistVO) throws SQLException; + + int deleteTbFisReducdeviceMntng(RecvLinkVO recvLinkHistVO) throws SQLException; + + int updateTbFisReducdeviceMntng_Hist(RecvLinkVO recvLinkHistVO) throws SQLException; + + int selectTbFisReducdeviceMntngHist_Cnt(RecvLinkVO recvLinkVO) throws SQLException; + + int insertTbFisReducdeviceMntng_Error(RecvLinkVO recvLinkVO) throws SQLException;//에러자료 +} diff --git a/src/main/java/egovframework/itgcms/module/link/service/impl/RecvLinkServiceImpl.java b/src/main/java/egovframework/itgcms/module/link/service/impl/RecvLinkServiceImpl.java new file mode 100644 index 0000000..b92db7c --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/service/impl/RecvLinkServiceImpl.java @@ -0,0 +1,2760 @@ +package egovframework.itgcms.module.link.service.impl; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Vector; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.apache.poi.util.SystemOutLogger; +import org.springframework.stereotype.Service; +import org.springframework.ui.ModelMap; +import org.springframework.web.servlet.ModelAndView; + +import com.jcraft.jsch.JSchException; + +import egovframework.com.cmm.service.Globals; +import egovframework.com.utl.sim.service.EgovFileTool; +import egovframework.itgcms.common.ItgMap; +//import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigVO; +//import egovframework.itgcms.core.menu.service.MngrMenuVO; +import egovframework.itgcms.module.link.service.LinkService; +import egovframework.itgcms.module.link.RecvLinkScheduler; +import egovframework.itgcms.module.link.SFTPUtil; +import egovframework.itgcms.module.link.service.RecvLinkService; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.module.link.service.SendLinkVO; +import egovframework.itgcms.module.link.service.RecvLinkVO; +import egovframework.itgcms.util.Client; +import egovframework.itgcms.util.CommUtil; +//import egovframework.itgcms.util.ExcelDownloadView; +//import egovframework.itgcms.util.NewGpkiUtil; +//import egovframework.itgcms.util.ShareGpki; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +@Service("recvLinkService") +public class RecvLinkServiceImpl extends EgovAbstractServiceImpl implements RecvLinkService { + + static Logger logger = Logger.getLogger(RecvLinkServiceImpl.class.getName()); + + @Resource(name="recvLinkMapper") + private RecvLinkMapper recvLinkMapper; + + @Resource(name="linkMapper") + private LinkMapper linkMapper; + + public RecvLinkServiceImpl() {} + + public RecvLinkServiceImpl(boolean flag) { + if(recvLinkMapper == null) { + recvLinkMapper = (RecvLinkMapper) CommUtil.getSpringBean("recvLinkMapper"); + } + } + +//단속지자체 고농도발령 연계 + @Override + public void cegmUfIntf001(String seatNumber, String intrfcId) throws SQLException, IOException { + + ArrayList list = new ArrayList(); + + try { + + //SFTP + SFTPUtil sftpUtil = new SFTPUtil(); + + String folderNumber = seatNumber+"/"; + String sftpRecvPath = Globals.topisSftpRecvPath+seatNumber; + String locaRecvPath = Globals.topisLocaRecvPath+folderNumber; + String recvErrPath = Globals.topisRecvErrPath +folderNumber; + String recvSuccPath = Globals.topisRecvSuccPath+folderNumber; + + boolean procSftp = sftpUtil.recvFileSftp(sftpRecvPath, locaRecvPath, intrfcId); + +// if(procSftp){ + + File dirFile = new File(locaRecvPath); + File []fileList = dirFile.listFiles(); + + String tempPath0 = ""; + String tempPath = ""; + String fileName0 = ""; + String fileName = ""; + String eofFileNames[] = new String[fileList.length]; + String fileNames[] = new String[fileList.length]; + String eofFileCnt[] = new String[fileList.length]; + int eofCnt = 0; + int csvCnt = 0; + +// 1. eof 파일만 읽기 +// 2. eof 파일 갯수만큼 loop - eof 파일과 동일한 이름의 csv 파일만 작업 +// 3. csv 파일 읽기 +// 4. csv 파일이 있을때만 +// 5. csv 파일 갯수만큼 loop +// 5_1. 01번 파일, 02, 03, 04 번 파일 읽기 +// 6. 파일 읽어 오기 +// 7. 파일의 row 만큼 loop +// 8. 각 row 의 컬럼을 추출 + + for(File tempFile : fileList) {//1. eof 파일만 읽기 + if(tempFile.isFile()) { + tempPath0 = tempFile.getParent(); + fileName0 = tempFile.getName(); +// System.out.println("fileName0 = "+fileName0); + if(fileName0.contains(".eof")){//.eof 파일 + eofFileNames[eofCnt] = fileName0.substring(0, fileName0.lastIndexOf(".eof")); + + //.eof 파일 읽어서 총 cnt 가져오기 + ArrayList list0 = new ArrayList(); + list0 = EgovFileTool.parsFileByChar2(locaRecvPath+eofFileNames[eofCnt]+".eof");//6. 파일 읽어 오기 + eofFileCnt[eofCnt] = (String) list0.get(0); + + eofCnt++; + } + if(fileName0.contains(".csv")){//.eof 파일 + csvCnt++; + } + } + } + + if(eofCnt == 0){ + if(csvCnt > 0){//.eof 파일 없이 .csv 파일만 존재 + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(fileName0); + linkVO.setCntcErrorMssage("eof 파일이 없습니다."); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + } + + for(int i=0; i 0){//4. csv 파일이 있을때만 + + boolean errorCodeCsv = false; + boolean errorCodeEof = false; + String cmmndTy = ""; + + for(int j=0; j 0){//null값이 있거나 길이가 안 맞을경우 + + linkVO.setIntrfcId(intrfcId); //인터페이스 아이디 + linkVO.setCntcFileNm(fileNames[j].toString());//파일명 + linkVO.setCntcErrorColumn(cntcErrorColumn); //에러컬럼 + linkVO.setCntcErrorMssage(cntcErrorMssage); //에러메세지 + linkVO.setCntcSuccesAt("N"); //성공, 에러 구분 + linkVO.setCntcCnfirmAt("N"); //파일 전송 여부 + linkVO.setCntcErrorLineco(k+1); //에러라인 + +// System.out.println("fileNm = "+fileNames[j].toString()); +// System.out.println("errorColumn = "+cntcErrorColumn); +// System.out.println("errorMssage = "+cntcErrorMssage); +// System.out.println("errorLint = "+k+1); + + linkMapper.insertTbFisCntcErrorManage(linkVO);//에러데이터 + + errorCnt = 0;//다음 row가 error table로 가는걸 방지하기 위해 cnt를 0으로 초기화 + + } else {//순수한 데이터 값만을 보았을때 오류 없음 + +// recvLinkMapper.deleteCegmUfIntf001_1st(recvDelVO);//기존 데어터 삭제 + recvLinkMapper.insertCegmUfIntf001_1st(recvLinkVO); + recvLinkMapper.insertCegmUfIntf001_Hist_1st(recvLinkVO); + } + }//7. 파일의 row 만큼 loop + }//5_1. 01번 파일 + +// if((i==0)&&(j==0)){//merge process 로 변경 +// recvLinkMapper.deleteCegmUfIntf001_2nd(recvDelVO);//기존 데어터 삭제 +// recvLinkMapper.deleteCegmUfIntf001_4th(recvDelVO);//기존 데어터 삭제 +// } +//_02.csv 파일 + if(fileNames[j].toString().contains("_02.csv")){//5_2. 02번 파일 + + int lengHghdnstyGnfdNo = 10;//발령번호 + int lengGnfdBgndeman = 8; //시작일자 + int lengGnfdEnddeman = 8; //종료일자 + int lengGnfdRegltBegintime = 6; //단속시작 시간 + int lengGnfdRegltEndtime = 6; //단속종료 시간 + + list = EgovFileTool.parsFileByChar2(locaRecvPath+fileNames[j].toString());//6. 파일 읽어 오기 + + int errorCnt =0; + for (int k=0; k 0){//null값이 있거나 길이가 안 맞을경우 + + linkVO.setIntrfcId(intrfcId); //인터페이스 아이디 + linkVO.setCntcFileNm(fileNames[j].toString());//파일명 + linkVO.setCntcErrorColumn(cntcErrorColumn); //에러컬럼 + linkVO.setCntcErrorMssage(cntcErrorMssage); //에러메세지 + linkVO.setCntcSuccesAt("N"); //성공, 에러 구분 + linkVO.setCntcCnfirmAt("N"); //파일 전송 여부 + linkVO.setCntcErrorLineco(k+1); //에러라인 + +// System.out.println("fileNm = "+fileNames[j].toString()); +// System.out.println("errorColumn = "+cntcErrorColumn); +// System.out.println("errorMssage = "+cntcErrorMssage); +// System.out.println("errorLint = "+k+1); + + linkMapper.insertTbFisCntcErrorManage(linkVO);//에러데이터 + + errorCnt = 0;//다음 row가 error table로 가는걸 방지하기 위해 cnt를 0으로 초기화 + + } else {//순수한 데이터 값만을 보았을때 오류 없음 + +// recvLinkMapper.deleteCegmUfIntf001_2nd(recvLinkVO);//기존 데어터 삭제 + recvLinkMapper.insertCegmUfIntf001_2nd(recvLinkVO); + recvLinkMapper.insertCegmUfIntf001_Hist_2nd(recvLinkVO); + } + }//7. 파일의 row 만큼 loop + }//5_2. 02번 파일 +//_03.csv 파일 + if(fileNames[j].toString().contains("_03.csv")){//5_3. 03번 파일 + +// int lengHghdnstyGnfdNo = 10;//발령번호 +// int lengCarRegNo = 12;//차량번호 +// +// list = EgovFileTool.parsFileByChar2(locaRecvPath+fileNames[j].toString());//6. 파일 읽어 오기 +// +// int errorCnt =0; +// for (int k=0; k 0){//null값이 있거나 길이가 안 맞을경우 +// +// linkVO.setIntrfcId(intrfcId); //인터페이스 아이디 +// linkVO.setCntcFileNm(fileNames[j].toString());//파일명 +// linkVO.setCntcErrorColumn(cntcErrorColumn); //에러컬럼 +// linkVO.setCntcErrorMssage(cntcErrorMssage); //에러메세지 +// linkVO.setCntcSuccesAt("N"); //성공, 에러 구분 +// linkVO.setCntcCnfirmAt("N"); //파일 전송 여부 +// linkVO.setCntcErrorLineco(k+1); //에러라인 +// +//// System.out.println("fileNm = "+fileNames[j].toString()); +//// System.out.println("errorColumn = "+cntcErrorColumn); +//// System.out.println("errorMssage = "+cntcErrorMssage); +//// System.out.println("errorLint = "+k+1); +// +// linkMapper.insertTbFisCntcErrorManage(linkVO);//에러데이터 +// +// errorCnt = 0;//다음 row가 error table로 가는걸 방지하기 위해 cnt를 0으로 초기화 +// +// } else {//순수한 데이터 값만을 보았을때 오류 없음 +// +// int hghdnstyGnfdNoCnt = recvLinkMapper.selectCegmUfIntf001_Cnt(recvLinkVO);//기존 데이터 갯수(PK) +// +// String hghdnstyGnfdProcessAt = "Y";//Hist 처리여부 +// String hghdnstyGnfdProcessMssage = ""; //Error 메세지 +// +// if(hghdnstyGnfdNoCnt == 0){//데이터 없음 +// hghdnstyGnfdProcessAt = "E"; +// hghdnstyGnfdProcessMssage = "수정 할 자료가 존재하지 않습니다."; +// } +// +//// recvLinkVO.setHghdnstyGnfdProcessAt(hghdnstyGnfdProcessAt); +//// recvLinkVO.setHghdnstyGnfdProcessMssage(hghdnstyGnfdProcessMssage); +// +// if(hghdnstyGnfdProcessAt != "E"){ +// recvLinkMapper.updateCegmUfIntf001_3th(recvLinkVO); +// } +//// recvLinkMapper.insertCegmUfIntf001_Hist(recvLinkVO); +// } +// }//7. 파일의 row 만큼 loop + }//5_3. 03번 파일 +//_04.csv 파일 + if(fileNames[j].toString().contains("_04.csv")){//5_4. 04번 파일 + + int lengHghdnstyGnfdNo = 10;//발령번호 + int lengHghdnstyRegltArea = 12;//단속지역 + int lengHghdnstyAreaSe = 1; //지역구분 + + list = EgovFileTool.parsFileByChar2(locaRecvPath+fileNames[j].toString());//6. 파일 읽어 오기 + + int errorCnt =0; + for (int k=0; k 0){//null값이 있거나 길이가 안 맞을경우 + + linkVO.setIntrfcId(intrfcId); //인터페이스 아이디 + linkVO.setCntcFileNm(fileNames[j].toString());//파일명 + linkVO.setCntcErrorColumn(cntcErrorColumn); //에러컬럼 + linkVO.setCntcErrorMssage(cntcErrorMssage); //에러메세지 + linkVO.setCntcSuccesAt("N"); //성공, 에러 구분 + linkVO.setCntcCnfirmAt("N"); //파일 전송 여부 + linkVO.setCntcErrorLineco(k+1); //에러라인 + +// System.out.println("fileNm = "+fileNames[j].toString()); +// System.out.println("errorColumn = "+cntcErrorColumn); +// System.out.println("errorMssage = "+cntcErrorMssage); +// System.out.println("errorLint = "+k+1); + + linkMapper.insertTbFisCntcErrorManage(linkVO);//에러데이터 + + errorCnt = 0;//다음 row가 error table로 가는걸 방지하기 위해 cnt를 0으로 초기화 + + } else {//순수한 데이터 값만을 보았을때 오류 없음 + +// recvLinkMapper.deleteCegmUfIntf001_4th(recvLinkVO);//기존 데어터 삭제 + recvLinkMapper.insertCegmUfIntf001_4th(recvLinkVO); + recvLinkMapper.insertCegmUfIntf001_Hist_4th(recvLinkVO); + } + }//7. 파일의 row 만큼 loop + }//5_4. 04번 파일 + + if(errorCodeCsv){//한 row라도 error가 있을때, csv 파일 옮기기 + + Path file = Paths.get(locaRecvPath+fileNames[j].toString()); +// System.out.println("errorFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvErrPath); + Files.move(file, movePath.resolve(file.getFileName())); + + errorCodeCsv = false; + errorCodeEof = true; + + } else { + + Path file = Paths.get(locaRecvPath+fileNames[j].toString()); +// System.out.println("succFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvSuccPath); + Files.move(file, movePath.resolve(file.getFileName())); +// EgovFileTool.deleteFile(recvSuccPath+fileNames9[j]);//성공한 파일 지우기 + } + }//5. csv 파일 갯수만큼 loop + + if(errorCodeEof){//한 row라도 error가 있을때, eof 파일 옮기기 + + Path file = Paths.get(locaRecvPath+eofFileNames[i].toString()+".eof"); +// System.out.println("errorEofFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvErrPath); + Files.move(file, movePath.resolve(file.getFileName())); + + } else { + + Path file = Paths.get(locaRecvPath+eofFileNames[i].toString()+".eof"); +// System.out.println("succEofFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvSuccPath); + Files.move(file, movePath.resolve(file.getFileName())); +// EgovFileTool.deleteFile(recvSuccPath+eofFileNames[i]);//성공한 파일 지우기 + } + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileNames[i]+".eof"); + linkVO.setCntcErrorMssage("Recv Success"); + linkVO.setCntcSuccesAt("Y"); + linkVO.setCntcCnfirmAt("Y"); + linkVO.setCntcErrorLineco(Integer.parseInt(eofFileCnt[i])); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + + } else {//4. csv 파일이 있을때만 + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileNames[i]+".eof"); + linkVO.setCntcErrorMssage("csv 파일이 없습니다."); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + }//2. eof 파일 갯수만큼 loop +// }//procSftp + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + +//친환경 등급 + @Override + public void lezCarGrade(String seatNumber, String intrfcId) throws SQLException, IOException { + + ArrayList list = new ArrayList(); + + try { + + //SFTP + SFTPUtil sftpUtil = new SFTPUtil(); + + String folderNumber = seatNumber+"/"; + String sftpRecvPath = Globals.topisSftpRecvPath+seatNumber; + String locaRecvPath = Globals.topisLocaRecvPath+folderNumber; + String recvErrPath = Globals.topisRecvErrPath +folderNumber; + String recvSuccPath = Globals.topisRecvSuccPath+folderNumber; + + boolean procSftp = sftpUtil.recvFileSftp(sftpRecvPath, locaRecvPath, intrfcId); + +// if(procSftp){ + + File dirFile = new File(locaRecvPath); + File []fileList = dirFile.listFiles(); + + String tempPath0 = ""; + String tempPath = ""; + String fileName0 = ""; + String fileName = ""; + String eofFileNames[] = new String[fileList.length]; + String fileNames[] = new String[fileList.length]; + String eofFileCnt[] = new String[fileList.length]; + int eofCnt = 0; + int csvCnt = 0; + +// 1. eof 파일만 읽기 +// 2. eof 파일 갯수만큼 loop - eof 파일과 동일한 이름의 csv 파일만 작업 +// 3. csv 파일 읽기 +// 4. csv 파일이 있을때만 +// 5. csv 파일 갯수만큼 loop +// 6. 파일 읽어 오기 +// 7. 파일의 row 만큼 loop +// 8. 각 row 의 컬럼을 추출 + + for(File tempFile : fileList) {//1. eof 파일만 읽기 + if(tempFile.isFile()) { + tempPath0 = tempFile.getParent(); + fileName0 = tempFile.getName(); +// System.out.println("fileName0 = "+fileName0); + if(fileName0.contains(".eof")){//.eof 파일 + eofFileNames[eofCnt] = fileName0.substring(0, fileName0.lastIndexOf(".eof")); + + //.eof 파일 읽어서 총 cnt 가져오기 + ArrayList list0 = new ArrayList(); + list0 = EgovFileTool.parsFileByChar2(locaRecvPath+eofFileNames[eofCnt]+".eof");//6. 파일 읽어 오기 + eofFileCnt[eofCnt] = (String) list0.get(0); + + eofCnt++; + } + if(fileName0.contains(".csv")){//.eof 파일 + csvCnt++; + } + } + } + + + if(eofCnt == 0){ + if(csvCnt > 0){//.eof 파일 없이 .csv 파일만 존재 + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(fileName0); + linkVO.setCntcErrorMssage("eof 파일이 없습니다."); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + } + + for(int i=0; i 0){//4. csv 파일이 있을때만 + + boolean errorCodeCsv = false; + boolean errorCodeEof = false; + + for(int j=0; j 0){//null값이 있거나 길이가 안 맞을경우 + + linkVO.setIntrfcId(intrfcId); //인터페이스 아이디 + linkVO.setCntcFileNm(fileNames[j].toString());//파일명 + linkVO.setCntcErrorColumn(cntcErrorColumn); //에러컬럼 + linkVO.setCntcErrorMssage(cntcErrorMssage); //에러메세지 + linkVO.setCntcSuccesAt("N"); //성공, 에러 구분 + linkVO.setCntcCnfirmAt("N"); //파일 전송 여부 + linkVO.setCntcErrorLineco(k+1); //에러라인 + +// System.out.println("fileNm = "+fileNames[j].toString()); +// System.out.println("errorColumn = "+cntcErrorColumn); +// System.out.println("errorMssage = "+cntcErrorMssage); +// System.out.println("errorLint = "+k+1); + + linkMapper.insertTbFisCntcErrorManage(linkVO);//에러데이터 + + errorCnt = 0;//다음 row가 error table로 가는걸 방지하기 위해 cnt를 0으로 초기화 + + } else {//순수한 데이터 값만을 보았을때 오류 없음 + + String evrfrndGradChangeSe = strArr[12].toString().trim();//변경구분자 추출 CUD + + int gradCnt = recvLinkMapper.selectTbFisEvrfrndGrad_Cnt(recvLinkVO);//기존 데이터 갯수(PK) + + String evrfrndGradHistProcessAt = "Y";//Hist 처리여부 + String evrfrndGradHistProcessMssa = ""; //Error 메세지 + + if(evrfrndGradChangeSe.equals("C")){ + if(gradCnt > 0){//데이터 존재 + evrfrndGradHistProcessAt = "E"; + evrfrndGradHistProcessMssa = "동일한 차량관리번호의 자료가 존재합니다."; + } + } else if(evrfrndGradChangeSe.equals("U")){ + if(gradCnt == 0){//데이터 없음 + // 2023.10.16 김경민 - 원복 + evrfrndGradHistProcessAt = "E"; + evrfrndGradHistProcessMssa = "수정 할 자료가 존재하지 않습니다."; + } + } else if(evrfrndGradChangeSe.equals("D")){ + if(gradCnt == 0){//데이터 없음 + evrfrndGradHistProcessAt = "E"; + evrfrndGradHistProcessMssa = "삭제 할 자료가 존재하지 않습니다."; + } + } else {//CUD 외 예외 + evrfrndGradHistProcessAt = "E"; + evrfrndGradHistProcessMssa = "친환경 등급 변경구분 [C,U,D] 외 구분할 수 없는 문자입니다."; + } + + recvLinkVO.setEvrfrndGradHistProcessAt(evrfrndGradHistProcessAt); + recvLinkVO.setEvrfrndGradHistProcessMssa(evrfrndGradHistProcessMssa); + + if(evrfrndGradHistProcessAt != "E"){ + if(evrfrndGradChangeSe.equals("C")){ + recvLinkMapper.insertTbFisEvrfrndGrad(recvLinkVO); + } else if (evrfrndGradChangeSe.equals("U")){ + if(gradCnt > 0) { + recvLinkMapper.updateTbFisEvrfrndGrad(recvLinkVO); + // U 구분값일 때 기존 데이터 없을 경우 insert 추가 + // 2023.10.16 김경민 - 원복 + }/* else if(gradCnt == 0) { + recvLinkMapper.insertTbFisEvrfrndGrad(recvLinkVO); + }*/ + } else if (evrfrndGradChangeSe.equals("D")){ + recvLinkMapper.deleteTbFisEvrfrndGrad(recvLinkVO); + } + } + + recvLinkMapper.insertTbFisEvrfrndGrad_Hist(recvLinkVO); + System.out.println("FileName = "+fileNames[j]+" , Row = "+k); + + } + + }//7. 파일의 row 만큼 loop + + if(errorCodeCsv){//한 row라도 error가 있을때, csv 파일 옮기기 + Path file = Paths.get(locaRecvPath+fileNames[j].toString()); +// System.out.println("errorFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvErrPath); + Files.move(file, movePath.resolve(file.getFileName())); + + errorCodeCsv = false; + errorCodeEof = true; + + } else { + Path file = Paths.get(locaRecvPath+fileNames[j].toString()); +// System.out.println("succFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvSuccPath); + Files.move(file, movePath.resolve(file.getFileName())); +// EgovFileTool.deleteFile(recvSuccPath+fileNames9[j]);//성공한 파일 지우기 + } + }//5. csv 파일 갯수만큼 loop + + if(errorCodeEof){//한 row라도 error가 있을때, eof 파일 옮기기 + Path file = Paths.get(locaRecvPath+eofFileNames[i].toString()+".eof"); +// System.out.println("errorEofFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvErrPath); + Files.move(file, movePath.resolve(file.getFileName())); + + } else { + Path file = Paths.get(locaRecvPath+eofFileNames[i].toString()+".eof"); +// System.out.println("succEofFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvSuccPath); + Files.move(file, movePath.resolve(file.getFileName())); +// EgovFileTool.deleteFile(recvSuccPath+eofFileNames[i]);//성공한 파일 지우기 + } + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileNames[i]+".eof"); + linkVO.setCntcErrorMssage("Recv Success"); + linkVO.setCntcSuccesAt("Y"); + linkVO.setCntcCnfirmAt("Y"); + linkVO.setCntcErrorLineco(Integer.parseInt(eofFileCnt[i])); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + + } else {//4. csv 파일이 있을때만 + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileNames[i]+".eof"); + linkVO.setCntcErrorMssage("csv 파일이 없습니다."); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + }//2. eof 파일 갯수만큼 loop +// }//procSftp + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + //친환경 등급 + @Override + public void lezCarGradeLot(String seatNumber, String intrfcId) throws SQLException, IOException { + + ArrayList list = new ArrayList(); + + try { + + //SFTP + SFTPUtil sftpUtil = new SFTPUtil(); + + String folderNumber = seatNumber+"/"; + String sftpRecvPath = Globals.topisSftpRecvPath+seatNumber; + String locaRecvPath = Globals.topisLocaRecvPath+folderNumber; + String recvErrPath = Globals.topisRecvErrPath +folderNumber; + String recvSuccPath = Globals.topisRecvSuccPath+folderNumber; + + boolean procSftp = sftpUtil.recvFileSftp(sftpRecvPath, locaRecvPath, intrfcId); + +// if(procSftp){ + + File dirFile = new File(locaRecvPath); + File []fileList = dirFile.listFiles(); + + String tempPath0 = ""; + String tempPath = ""; + String fileName0 = ""; + String fileName = ""; + String eofFileNames[] = new String[fileList.length]; + String fileNames[] = new String[fileList.length]; + String eofFileCnt[] = new String[fileList.length]; + int eofCnt = 0; + int csvCnt = 0; + +// 1. eof 파일만 읽기 +// 2. eof 파일 갯수만큼 loop - eof 파일과 동일한 이름의 csv 파일만 작업 +// 3. csv 파일 읽기 +// 4. csv 파일이 있을때만 +// 5. csv 파일 갯수만큼 loop +// 6. 파일 읽어 오기 +// 7. 파일의 row 만큼 loop +// 8. 각 row 의 컬럼을 추출 + + for(File tempFile : fileList) {//1. eof 파일만 읽기 + if(tempFile.isFile()) { + tempPath0 = tempFile.getParent(); + fileName0 = tempFile.getName(); +// System.out.println("fileName0 = "+fileName0); + if(fileName0.contains(".eof")){//.eof 파일 + eofFileNames[eofCnt] = fileName0.substring(0, fileName0.lastIndexOf(".eof")); + + //.eof 파일 읽어서 총 cnt 가져오기 + ArrayList list0 = new ArrayList(); + list0 = EgovFileTool.parsFileByChar2(locaRecvPath+eofFileNames[eofCnt]+".eof");//6. 파일 읽어 오기 + eofFileCnt[eofCnt] = (String) list0.get(0); + + eofCnt++; + } + if(fileName0.contains(".csv")){//.eof 파일 + csvCnt++; + } + } + } + + if(eofCnt == 0){ + if(csvCnt > 0){//.eof 파일 없이 .csv 파일만 존재 + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(fileName0); + linkVO.setCntcErrorMssage("eof 파일이 없습니다."); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + } + + for(int i=0; i 0){//4. csv 파일이 있을때만 + + boolean errorCodeCsv = false; + boolean errorCodeEof = false; + + for(int j=0; j 0){//.eof 파일 없이 .csv 파일만 존재 + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(fileName0); + linkVO.setCntcErrorMssage("eof 파일이 없습니다."); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + } + + for(int i=0; i 0){//4. csv 파일이 있을때만 + + boolean errorCodeCsv = false; + boolean errorCodeEof = false; + + for(int j=0; j 0){//null값이 있거나 길이가 안 맞을경우 + + linkVO.setIntrfcId(intrfcId); //인터페이스 아이디 + linkVO.setCntcFileNm(fileNames[j].toString());//파일명 + linkVO.setCntcErrorColumn(cntcErrorColumn); //에러컬럼 + linkVO.setCntcErrorMssage(cntcErrorMssage); //에러메세지 + linkVO.setCntcSuccesAt("N"); //성공, 에러 구분 + linkVO.setCntcCnfirmAt("N"); //파일 전송 여부 + linkVO.setCntcErrorLineco(k+1); //에러라인 + +// System.out.println("fileNm = "+fileNames[j].toString()); +// System.out.println("errorColumn = "+cntcErrorColumn); +// System.out.println("errorMssage = "+cntcErrorMssage); +// System.out.println("errorLint = "+k+1); + + linkMapper.insertTbFisCntcErrorManage(linkVO);//에러데이터 + + errorCnt = 0;//다음 row가 error table로 가는걸 방지하기 위해 cnt를 0으로 초기화 + + } else {//순수한 데이터 값만을 보았을때 오류 없음 + + String reducdeviceReqstChangeSe = strArr[7].toString().trim();//변경구분자 추출 CUD + + int reqCnt = recvLinkMapper.selectTbFisReducdeviceReqst_Cnt(recvLinkVO);//기존 데이터 갯수(PK) + + String reducdeviceReqstProcessAt = "Y";//Hist 처리여부 + String reducdeviceReqstProcessMssa = ""; //Error 메세지 + + if(reducdeviceReqstChangeSe.equals("C")){ + if(reqCnt > 0){//데이터 존재 + reducdeviceReqstProcessAt = "E"; + reducdeviceReqstProcessMssa = "동일한 차량번호, 차대번호의 자료가 존재합니다."; + } + } else if(reducdeviceReqstChangeSe.equals("U")){ + if(reqCnt == 0){//데이터 없음 + reducdeviceReqstProcessAt = "E"; + reducdeviceReqstProcessMssa = "수정 할 자료가 존재하지 않습니다."; + } + } else if(reducdeviceReqstChangeSe.equals("D")){ + if(reqCnt == 0){//데이터 없음 + reducdeviceReqstProcessAt = "E"; + reducdeviceReqstProcessMssa = "삭제 할 자료가 존재하지 않습니다."; + } + } else {//CUD 외 예외 + reducdeviceReqstProcessAt = "E"; + reducdeviceReqstProcessMssa = "친환경 등급 변경구분 [C,U,D] 외 구분할 수 없는 문자입니다."; + } + + recvLinkVO.setReducdeviceReqstProcessAt(reducdeviceReqstProcessAt); + recvLinkVO.setReducdeviceReqstProcessMssa(reducdeviceReqstProcessMssa); + + if(reducdeviceReqstProcessAt != "E"){ + if(reducdeviceReqstChangeSe.equals("C")){ + recvLinkMapper.insertTbFisReducdeviceReqst(recvLinkVO); + } else if (reducdeviceReqstChangeSe.equals("U")){ + recvLinkMapper.updateTbFisReducdeviceReqst(recvLinkVO); + } else if (reducdeviceReqstChangeSe.equals("D")){ + recvLinkMapper.deleteTbFisReducdeviceReqst(recvLinkVO); + } + } + + recvLinkMapper.insertTbFisReducdeviceReqst_Hist(recvLinkVO); +// System.out.println("FileName = "+fileNames[j]+" , Row = "+k); + } + }//7. 파일의 row 만큼 loop + + if(errorCodeCsv){//한 row라도 error가 있을때, csv 파일 옮기기 + + Path file = Paths.get(locaRecvPath+fileNames[j].toString()); +// System.out.println("errorFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvErrPath); + Files.move(file, movePath.resolve(file.getFileName())); + + errorCodeCsv = false; + errorCodeEof = true; + + } else { + + Path file = Paths.get(locaRecvPath+fileNames[j].toString()); +// System.out.println("succFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvSuccPath); + Files.move(file, movePath.resolve(file.getFileName())); +// EgovFileTool.deleteFile(recvSuccPath+fileNames9[j]);//성공한 파일 지우기 + } + }//5. csv 파일 갯수만큼 loop + + if(errorCodeEof){//한 row라도 error가 있을때, eof 파일 옮기기 + + Path file = Paths.get(locaRecvPath+eofFileNames[i].toString()+".eof"); +// System.out.println("errorEofFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvErrPath); + Files.move(file, movePath.resolve(file.getFileName())); + + } else { + + Path file = Paths.get(locaRecvPath+eofFileNames[i].toString()+".eof"); +// System.out.println("succEofFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvSuccPath); + Files.move(file, movePath.resolve(file.getFileName())); +// EgovFileTool.deleteFile(recvSuccPath+eofFileNames[i]);//성공한 파일 지우기 + } + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileNames[i]+".eof"); + linkVO.setCntcErrorMssage("Recv Success"); + linkVO.setCntcSuccesAt("Y"); + linkVO.setCntcCnfirmAt("Y"); + linkVO.setCntcErrorLineco(Integer.parseInt(eofFileCnt[i])); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + + } else {//4. csv 파일이 있을때만 + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileNames[i]+".eof"); + linkVO.setCntcErrorMssage("csv 파일이 없습니다."); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + }//2. eof 파일 갯수만큼 loop +// }//procSftp + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + +//매연저감장치 장착 정보 + @Override + public void lezDpfYn(String seatNumber, String intrfcId) throws SQLException, IOException { + + ArrayList list = new ArrayList(); + + try { + + //SFTP + SFTPUtil sftpUtil = new SFTPUtil(); + + String folderNumber = seatNumber+"/"; + String sftpRecvPath = Globals.topisSftpRecvPath+seatNumber; + String locaRecvPath = Globals.topisLocaRecvPath+folderNumber; + String recvErrPath = Globals.topisRecvErrPath +folderNumber; + String recvSuccPath = Globals.topisRecvSuccPath+folderNumber; + + boolean procSftp = sftpUtil.recvFileSftp(sftpRecvPath, locaRecvPath, intrfcId); + +// if(procSftp){ + + File dirFile = new File(locaRecvPath); + File []fileList = dirFile.listFiles(); + + String tempPath0 = ""; + String tempPath = ""; + String fileName0 = ""; + String fileName = ""; + String eofFileNames[] = new String[fileList.length]; + String fileNames[] = new String[fileList.length]; + String eofFileCnt[] = new String[fileList.length]; + int eofCnt = 0; + int csvCnt = 0; + +// 1. eof 파일만 읽기 +// 2. eof 파일 갯수만큼 loop - eof 파일과 동일한 이름의 csv 파일만 작업 +// 3. csv 파일 읽기 +// 4. csv 파일이 있을때만 +// 5. csv 파일 갯수만큼 loop +// 6. 파일 읽어 오기 +// 7. 파일의 row 만큼 loop +// 8. 각 row 의 컬럼을 추출 + + for(File tempFile : fileList) {//1. eof 파일만 읽기 + if(tempFile.isFile()) { + tempPath0 = tempFile.getParent(); + fileName0 = tempFile.getName(); +// System.out.println("fileName0 = "+fileName0); + if(fileName0.contains(".eof")){//.eof 파일 + eofFileNames[eofCnt] = fileName0.substring(0, fileName0.lastIndexOf(".eof")); + + //.eof 파일 읽어서 총 cnt 가져오기 + ArrayList list0 = new ArrayList(); + list0 = EgovFileTool.parsFileByChar2(locaRecvPath+eofFileNames[eofCnt]+".eof");//6. 파일 읽어 오기 + eofFileCnt[eofCnt] = (String) list0.get(0); + + eofCnt++; + } + if(fileName0.contains(".csv")){//.eof 파일 + csvCnt++; + } + } + } + + if(eofCnt == 0){ + if(csvCnt > 0){//.eof 파일 없이 .csv 파일만 존재 + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(fileName0); + linkVO.setCntcErrorMssage("eof 파일이 없습니다."); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + } + + for(int i=0; i 0){//4. csv 파일이 있을때만 + + boolean errorCodeCsv = false; + boolean errorCodeEof = false; + + for(int j=0; j 0){//null값이 있거나 길이가 안 맞을경우 + + linkVO.setIntrfcId(intrfcId); //인터페이스 아이디 + linkVO.setCntcFileNm(fileNames[j].toString());//파일명 + linkVO.setCntcErrorColumn(cntcErrorColumn); //에러컬럼 + linkVO.setCntcErrorMssage(cntcErrorMssage); //에러메세지 + linkVO.setCntcSuccesAt("N"); //성공, 에러 구분 + linkVO.setCntcCnfirmAt("N"); //파일 전송 여부 + linkVO.setCntcErrorLineco(k+1); //에러라인 + +// System.out.println("fileNm = "+fileNames[j].toString()); +// System.out.println("errorColumn = "+cntcErrorColumn); +// System.out.println("errorMssage = "+cntcErrorMssage); +// System.out.println("errorLint = "+k+1); + + linkMapper.insertTbFisCntcErrorManage(linkVO);//에러데이터 + + errorCnt = 0;//다음 row가 error table로 가는걸 방지하기 위해 cnt를 0으로 초기화 + + } else {//순수한 데이터 값만을 보았을때 오류 없음 + + String reducdeviceMntngChangeSe = strArr[8].toString().trim();//변경구분자 추출 CUD + + int mntngCnt = recvLinkMapper.selectTbFisReducdeviceMntng_Cnt(recvLinkVO);//기존 데이터 갯수(PK) + + String reducdeviceMntngProcessAt = "Y";//Hist 처리여부 + String reducdeviceMntngProcessMssa = ""; //Error 메세지 + + if(reducdeviceMntngChangeSe.equals("C")){ + if(mntngCnt > 0){//데이터 존재 + reducdeviceMntngProcessAt = "E"; + reducdeviceMntngProcessMssa = "동일한 차량번호, 차대번호의 자료가 존재합니다."; + } + } else if(reducdeviceMntngChangeSe.equals("U")){ + if(mntngCnt == 0){//데이터 없음 + reducdeviceMntngProcessAt = "E"; + reducdeviceMntngProcessMssa = "수정 할 자료가 존재하지 않습니다."; + } + } else if(reducdeviceMntngChangeSe.equals("D")){ + if(mntngCnt == 0){//데이터 없음 + reducdeviceMntngProcessAt = "E"; + reducdeviceMntngProcessMssa = "삭제 할 자료가 존재하지 않습니다."; + } + } else {//CUD 외 예외 + reducdeviceMntngProcessAt = "E"; + reducdeviceMntngProcessMssa = "친환경 등급 변경구분 [C,U,D] 외 구분할 수 없는 문자입니다."; + } + + recvLinkVO.setReducdeviceMntngProcessAt(reducdeviceMntngProcessAt); + recvLinkVO.setReducdeviceMntngProcessMssa(reducdeviceMntngProcessMssa); + + int mntngHistCnt = recvLinkMapper.selectTbFisReducdeviceMntngHist_Cnt(recvLinkVO);//Hist 기존 데이터 갯수(PK) + + if(reducdeviceMntngProcessAt != "E"){ + if(reducdeviceMntngChangeSe.equals("C")){ + if(mntngCnt == 0){ + recvLinkMapper.insertTbFisReducdeviceMntng(recvLinkVO); + } + } else if (reducdeviceMntngChangeSe.equals("U")){ + recvLinkMapper.updateTbFisReducdeviceMntng(recvLinkVO); + } else if (reducdeviceMntngChangeSe.equals("D")){ + recvLinkMapper.deleteTbFisReducdeviceMntng(recvLinkVO); + } + } + + if(mntngHistCnt == 0){ + recvLinkMapper.insertTbFisReducdeviceMntng_Hist(recvLinkVO); + } + +// System.out.println("FileName = "+fileNames[j]+" , Row = "+k); + } + }//7. 파일의 row 만큼 loop + + if(errorCodeCsv){//한 row라도 error가 있을때, csv 파일 옮기기 + + Path file = Paths.get(locaRecvPath+fileNames[j].toString()); +// System.out.println("errorFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvErrPath); + Files.move(file, movePath.resolve(file.getFileName())); + + errorCodeCsv = false; + errorCodeEof = true; + + } else { + + Path file = Paths.get(locaRecvPath+fileNames[j].toString()); +// System.out.println("succFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvSuccPath); + Files.move(file, movePath.resolve(file.getFileName())); +// EgovFileTool.deleteFile(recvSuccPath+fileNames9[j]);//성공한 파일 지우기 + } + }//5. csv 파일 갯수만큼 loop + + if(errorCodeEof){//한 row라도 error가 있을때, eof 파일 옮기기 + + Path file = Paths.get(locaRecvPath+eofFileNames[i].toString()+".eof"); +// System.out.println("errorEofFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvErrPath); + Files.move(file, movePath.resolve(file.getFileName())); + + } else { + + Path file = Paths.get(locaRecvPath+eofFileNames[i].toString()+".eof"); +// System.out.println("succEofFile.getFileName() = "+file.getFileName()); + Path movePath = Paths.get(recvSuccPath); + Files.move(file, movePath.resolve(file.getFileName())); +// EgovFileTool.deleteFile(recvSuccPath+eofFileNames[i]);//성공한 파일 지우기 + } + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileNames[i]+".eof"); + linkVO.setCntcErrorMssage("Recv Success"); + linkVO.setCntcSuccesAt("Y"); + linkVO.setCntcCnfirmAt("Y"); + linkVO.setCntcErrorLineco(Integer.parseInt(eofFileCnt[i])); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + + } else {//4. csv 파일이 있을때만 + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileNames[i]+".eof"); + linkVO.setCntcErrorMssage("csv 파일이 없습니다."); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + }//2. eof 파일 갯수만큼 loop +// }//procSftp + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + public void ftpConnectionTest() throws SQLException, IOException { +// SFTPUtil sftpUtil = new SFTPUtil(); +// sftpUtil.ftpConnection(); + } + +//친환경 등급 +// @Override +// public void lezCarGrade_old() throws SQLException, IOException { +// +// ArrayList list = new ArrayList(); +// +// try { +// +// //SFTP +// SFTPUtil sftpUtil = new SFTPUtil(); +// +// String folderNumber = "41/"; +// String sftpRecvPath = Globals.topisSftpRecvPath+"41"; +// String locaRecvPath = Globals.topisLocaRecvPath+folderNumber; +// +// boolean procSftp = sftpUtil.recvFileSftp(sftpRecvPath, locaRecvPath, "LEZ_CAR_GRADE"); +// +// if(procSftp){ +// +// //local +// String recvErrPath = Globals.topisRecvErrPath +folderNumber; +// String recvSuccPath = Globals.topisRecvSuccPath+folderNumber; +// String recvTempPath = Globals.topisRecvTempPath+folderNumber; +// String recvEofPath = Globals.topisRecvEofPath +folderNumber; +// +// File dirFile = new File(locaRecvPath); +// File []fileList = dirFile.listFiles(); +// +// String tempPath = ""; +// String fileName = ""; +// String fileNames[] = new String[fileList.length]; +//// String eofFileName[] = new String[fileList.length]; +// boolean procss = false; +// int fileCnt = 0; +//// int eofCnt = 0; +// +// for(File tempFile : fileList) {//옮기기 전 폴더 읽기 +// if(tempFile.isFile()) { +// tempPath = tempFile.getParent(); +// fileName = tempFile.getName(); +// if(fileName.contains(".eof")){//.eof 파일이 있으면 배치프로세스 시작, 없으면 종료 +// procss = true; +//// eofFileName[eofCnt] = fileName; +//// eofCnt++; +// } +//// System.out.println("Path = "+tempPath); +//// System.out.println("fileName = "+fileName); +// fileNames[fileCnt] = fileName; +// fileCnt++; +// } +// } +// +// if(procss){//.eof 파일이 있으면 프로세스 진행 +//// if(!fileName.equals("")){ +// //파일 이동 +// for(int i=0; i 0){//데이터 존재 +// evrfrndGradHistProcessAt = "E"; +// evrfrndGradHistProcessMssa = "동일한 차량관리번호, 차량번호, 차대번호의 자료가 존재합니다."; +// } +// } else if(evrfrndGradChangeSe.equals("U")){ +// if(gradCnt == 0){//데이터 없음 +// evrfrndGradHistProcessAt = "E"; +// evrfrndGradHistProcessMssa = "수정 할 자료가 존재하지 않습니다."; +// } +// } else if(evrfrndGradChangeSe.equals("D")){ +// if(gradCnt == 0){//데이터 없음 +// evrfrndGradHistProcessAt = "E"; +// evrfrndGradHistProcessMssa = "삭제 할 자료가 존재하지 않습니다."; +// } +// } else {//CUD 외 예외 +// evrfrndGradHistProcessAt = "E"; +// evrfrndGradHistProcessMssa = "친환경 등급 변경구분 [C,U,D] 외 구분할 수 없는 문자입니다."; +// } +// +// recvLinkHistVO.setEvrfrndGradHistProcessAt(evrfrndGradHistProcessAt); +// recvLinkHistVO.setEvrfrndGradHistProcessMssa(evrfrndGradHistProcessMssa); +// +// if(evrfrndGradHistProcessAt != "E"){ +// if(evrfrndGradChangeSe.equals("C")){ +// recvLinkMapper.insertTbFisEvrfrndGrad(recvLinkHistVO); +// } else if (evrfrndGradChangeSe.equals("U")){ +// recvLinkMapper.updateTbFisEvrfrndGrad(recvLinkHistVO); +// } else if (evrfrndGradChangeSe.equals("D")){ +// recvLinkMapper.deleteTbFisEvrfrndGrad(recvLinkHistVO); +// } +// } +// +// recvLinkMapper.updateTbFisEvrfrndGrad_Hist(recvLinkHistVO); +// } +// }//.eof +// +// }//procSftp +// +// } catch (Exception e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } + +//매연저감장치 신청 정보 +// @Override +// public void lezDpfApply_old() throws SQLException, IOException { +// +// ArrayList list = new ArrayList(); +// +// try { +// +// //SFTP +// SFTPUtil sftpUtil = new SFTPUtil(); +// +// String folderNumber = "42/"; +// String sftpRecvPath = Globals.topisSftpRecvPath+"42"; +// String locaRecvPath = Globals.topisLocaRecvPath+folderNumber; +// +// boolean procSftp = sftpUtil.recvFileSftp(sftpRecvPath, locaRecvPath, "LEZ_DPF_APPLY"); +// +// if(procSftp){ +// +// //local +// String recvErrPath = Globals.topisRecvErrPath +folderNumber; +// String recvSuccPath = Globals.topisRecvSuccPath+folderNumber; +// String recvTempPath = Globals.topisRecvTempPath+folderNumber; +// String recvEofPath = Globals.topisRecvEofPath +folderNumber; +// +// File dirFile = new File(locaRecvPath); +// File []fileList = dirFile.listFiles(); +// +// String tempPath = ""; +// String fileName = ""; +// String fileNames[] = new String[fileList.length]; +//// String eofFileName[] = new String[fileList.length]; +// boolean procss = false; +// int fileCnt = 0; +//// int eofCnt = 0; +// +// for(File tempFile : fileList) {//옮기기 전 폴더 읽기 +// if(tempFile.isFile()) { +// tempPath = tempFile.getParent(); +// fileName = tempFile.getName(); +// if(fileName.contains(".eof")){//.eof 파일이 있으면 배치프로세스 시작, 없으면 종료 +// procss = true; +//// eofFileName[eofCnt] = fileName; +//// eofCnt++; +// } +//// System.out.println("Path = "+tempPath); +//// System.out.println("fileName = "+fileName); +// fileNames[fileCnt] = fileName; +// fileCnt++; +// } +// } +// +// if(procss){//.eof 파일이 있으면 프로세스 진행 +//// if(!fileName.equals("")){ +// //파일 이동 +// for(int i=0; i 0){//데이터 존재 +// reducdeviceReqstProcessAt = "E"; +// reducdeviceReqstProcessMssa = "동일한 차량번호, 차대번호의 자료가 존재합니다."; +// } +// } else if(reducdeviceReqstChangeSe.equals("U")){ +// if(reqCnt == 0){//데이터 없음 +// reducdeviceReqstProcessAt = "E"; +// reducdeviceReqstProcessMssa = "수정 할 자료가 존재하지 않습니다."; +// } +// } else if(reducdeviceReqstChangeSe.equals("D")){ +// if(reqCnt == 0){//데이터 없음 +// reducdeviceReqstProcessAt = "E"; +// reducdeviceReqstProcessMssa = "삭제 할 자료가 존재하지 않습니다."; +// } +// } else {//CUD 외 예외 +// reducdeviceReqstProcessAt = "E"; +// reducdeviceReqstProcessMssa = "저감장치 신청 변경구분 [C,U,D] 외 구분할 수 없는 문자입니다."; +// } +// +// recvLinkHistVO.setReducdeviceReqstProcessAt(reducdeviceReqstProcessAt); +// recvLinkHistVO.setReducdeviceReqstProcessMssa(reducdeviceReqstProcessMssa); +// +// if(reducdeviceReqstProcessAt != "E"){ +// if(reducdeviceReqstChangeSe.equals("C")){ +// recvLinkMapper.insertTbFisReducdeviceReqst(recvLinkHistVO); +// } else if (reducdeviceReqstChangeSe.equals("U")){ +// recvLinkMapper.updateTbFisReducdeviceReqst(recvLinkHistVO); +// } else if (reducdeviceReqstChangeSe.equals("D")){ +// recvLinkMapper.deleteTbFisReducdeviceReqst(recvLinkHistVO); +// } +// } +// recvLinkMapper.updateTbFisReducdeviceReqst_Hist(recvLinkHistVO); +// } +// }//.eof +// +// }//procSftp +// +// } catch (Exception e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } + +//매연저감장치 장착 정보 +// @Override +// public void lezDpfYn_old() throws SQLException, IOException { +// +// ArrayList list = new ArrayList(); +// +// try { +// +// //SFTP +// SFTPUtil sftpUtil = new SFTPUtil(); +// +// String folderNumber = "43/"; +// String sftpRecvPath = Globals.topisSftpRecvPath+"43"; +// String locaRecvPath = Globals.topisLocaRecvPath+folderNumber; +// +// boolean procSftp = sftpUtil.recvFileSftp(sftpRecvPath, locaRecvPath, "LEZ_DPF_YN"); +// +// if(procSftp){ +// +// //local +// String recvErrPath = Globals.topisRecvErrPath +folderNumber; +// String recvSuccPath = Globals.topisRecvSuccPath+folderNumber; +// String recvTempPath = Globals.topisRecvTempPath+folderNumber; +// String recvEofPath = Globals.topisRecvEofPath +folderNumber; +// +// File dirFile = new File(locaRecvPath); +// File []fileList = dirFile.listFiles(); +// +// String tempPath = ""; +// String fileName = ""; +// String fileNames[] = new String[fileList.length]; +//// String eofFileName[] = new String[fileList.length]; +// boolean procss = false; +// int fileCnt = 0; +//// int eofCnt = 0; +// +// for(File tempFile : fileList) {//옮기기 전 폴더 읽기 +// if(tempFile.isFile()) { +// tempPath = tempFile.getParent(); +// fileName = tempFile.getName(); +// if(fileName.contains(".eof")){//.eof 파일이 있으면 배치프로세스 시작, 없으면 종료 +// procss = true; +//// eofFileName[eofCnt] = fileName; +//// eofCnt++; +// } +//// System.out.println("Path = "+tempPath); +//// System.out.println("fileName = "+fileName); +// fileNames[fileCnt] = fileName; +// fileCnt++; +// } +// } +// +// if(procss){//.eof 파일이 있으면 프로세스 진행 +//// if(!fileName.equals("")){ +// //파일 이동 +// for(int i=0; i 0){//데이터 존재 +// reducdeviceMntngProcessAt = "E"; +// reducdeviceMntngProcessMssa = "동일한 차량번호, 차대번호의 자료가 존재합니다."; +// } +// } else if(reducdeviceMntngChangeSe.equals("U")){ +// if(mntngCnt == 0){//데이터 없음 +// reducdeviceMntngProcessAt = "E"; +// reducdeviceMntngProcessMssa = "수정 할 자료가 존재하지 않습니다."; +// } +// } else if(reducdeviceMntngChangeSe.equals("D")){ +// if(mntngCnt == 0){//데이터 없음 +// reducdeviceMntngProcessAt = "E"; +// reducdeviceMntngProcessMssa = "삭제 할 자료가 존재하지 않습니다."; +// } +// } else {//CUD 외 예외 +// reducdeviceMntngProcessAt = "E"; +// reducdeviceMntngProcessMssa = "저감장치 장착 변경구분 [C,U,D] 외 구분할 수 없는 문자입니다."; +// } +// +// recvLinkHistVO.setReducdeviceMntngProcessAt(reducdeviceMntngProcessAt); +// recvLinkHistVO.setReducdeviceMntngProcessMssa(reducdeviceMntngProcessMssa); +// +// if(reducdeviceMntngProcessAt != "E"){ +// if(reducdeviceMntngChangeSe.equals("C")){ +// recvLinkMapper.insertTbFisReducdeviceMntng(recvLinkHistVO); +// } else if (reducdeviceMntngChangeSe.equals("U")){ +// recvLinkMapper.updateTbFisReducdeviceMntng(recvLinkHistVO); +// } else if (reducdeviceMntngChangeSe.equals("D")){ +// recvLinkMapper.deleteTbFisReducdeviceMntng(recvLinkHistVO); +// } +// } +// recvLinkMapper.updateTbFisReducdeviceMntng_Hist(recvLinkHistVO); +// } +// }//.eof +// +// }//procSftp +// +// } catch (Exception e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } +} diff --git a/src/main/java/egovframework/itgcms/module/link/service/impl/SendLinkMapper.java b/src/main/java/egovframework/itgcms/module/link/service/impl/SendLinkMapper.java new file mode 100644 index 0000000..7511b7b --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/service/impl/SendLinkMapper.java @@ -0,0 +1,53 @@ +package egovframework.itgcms.module.link.service.impl; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import egovframework.com.sym.bat.service.BatchOpert; +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.module.link.service.RecvLinkVO; +import egovframework.itgcms.module.link.service.SendLinkVO; +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +@Mapper("sendLinkMapper") +public interface SendLinkMapper { + +//단속자료 송신 + int selectLezDisclosureList_Cnt(SendLinkVO sendLinkVO) throws SQLException; + + List selectLezDisclosureList(SendLinkVO sendLinkVO) throws SQLException; + +//카메라 상태 정보 + int selectLezCameraStatusList_Cnt(SendLinkVO sendLinkVO) throws SQLException; + + List selectLezCameraStatusList(SendLinkVO sendLinkVO) throws SQLException; + +//촬영차량 전일 정보 + void deleteLezRtviYdayLaneTraffic(SendLinkVO sendLinkVO) throws SQLException; + + void insertLezRtviYdayLaneTraffic(SendLinkVO sendLinkVO) throws SQLException; + + int selectLezRtviYdayLaneTrafficList_Cnt(SendLinkVO sendLinkVO) throws SQLException; + + List selectLezRtviYdayLaneTrafficList(SendLinkVO sendLinkVO) throws SQLException; + +//통계용 데이터 정보 + void deleteLezRtviWeekLaneTraffic(SendLinkVO sendLinkVO) throws SQLException; + + int selectLezRtviWeekLaneTraffic_OnCnt(SendLinkVO sendLinkVO) throws Exception; + + SendLinkVO selectLezRtviWeekLaneTraffic_On(SendLinkVO sendLinkVO) throws Exception; + + void insertLezRtviWeekLaneTraffic(SendLinkVO sendLinkVO) throws SQLException; + + int selectLezRtviWeekLaneTrafficList_Cnt(SendLinkVO sendLinkVO) throws SQLException; + + List selectLezRtviWeekLaneTrafficList(SendLinkVO sendLinkVO) throws SQLException; + +//차량번호인식 + int selectTbFisVhcleNoRecogList_Cnt(SendLinkVO sendLinkVO) throws SQLException; + + List selectTbFisVhcleNoRecogList(SendLinkVO sendLinkVO) throws SQLException; +} diff --git a/src/main/java/egovframework/itgcms/module/link/service/impl/SendLinkServiceImpl.java b/src/main/java/egovframework/itgcms/module/link/service/impl/SendLinkServiceImpl.java new file mode 100644 index 0000000..4025152 --- /dev/null +++ b/src/main/java/egovframework/itgcms/module/link/service/impl/SendLinkServiceImpl.java @@ -0,0 +1,1702 @@ +package egovframework.itgcms.module.link.service.impl; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Vector; + +import javax.annotation.Resource; +import javax.json.JsonArray; +import javax.json.JsonObject; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.codehaus.jettison.json.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.FormHttpMessageConverter; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.stereotype.Service; +import org.springframework.ui.ModelMap; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.servlet.ModelAndView; + +import com.jcraft.jsch.Logger; + +import au.com.bytecode.opencsv.CSVWriter; +import egovframework.com.cmm.service.Globals; +import egovframework.com.sym.bat.service.BatchOpert; +import egovframework.com.sym.bat.service.BatchSchdul; +import egovframework.com.utl.sim.service.EgovFileTool; +import egovframework.itgcms.common.ItgMap; +//import egovframework.itgcms.core.boardconfig.service.MngrBoardconfigVO; +//import egovframework.itgcms.core.menu.service.MngrMenuVO; +import egovframework.itgcms.module.link.service.LinkService; +import egovframework.itgcms.module.link.SFTPUtil; +import egovframework.itgcms.module.link.service.RecvLinkService; +import egovframework.itgcms.module.link.service.LinkVO; +import egovframework.itgcms.module.link.service.SendLinkService; +import egovframework.itgcms.module.link.service.SendLinkVO; +import egovframework.itgcms.module.link.service.RecvLinkVO; +//import egovframework.itgcms.util.Client; +import egovframework.itgcms.util.CommUtil; +//import egovframework.itgcms.util.ExcelDownloadView; +//import egovframework.itgcms.util.NewGpkiUtil; +//import egovframework.itgcms.util.ShareGpki; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URL; +import java.net.URLEncoder; + +@Service("sendLinkService") +public class SendLinkServiceImpl extends EgovAbstractServiceImpl implements SendLinkService { + + @Resource(name="sendLinkMapper") + private SendLinkMapper sendLinkMapper; + + @Resource(name="linkMapper") + private LinkMapper linkMapper; + + public SendLinkServiceImpl() {} + + public SendLinkServiceImpl(boolean flag) { + if(sendLinkMapper == null) { + sendLinkMapper = (SendLinkMapper) CommUtil.getSpringBean("sendLinkMapper"); + } + } + +//sftpSend + @Override + public void sftpSend(String seatNumber, String folderNumber, String intrfcId, String eofFileName, int totCnt) throws SQLException, IOException { + + try { + + //local + String sftpSendPath = Globals.topisSftpSendPath+seatNumber; + String locaSendPath = Globals.topisLocaSendPath+folderNumber; + String sendErrPath = Globals.topisSendErrPath +folderNumber; + String sendSuccPath = Globals.topisSendSuccPath+folderNumber; + + File dirFile = new File(locaSendPath); + File []fileList = dirFile.listFiles(); + + String tempPath = ""; + String fileName = ""; + + //SFTP + SFTPUtil sftpUtil = new SFTPUtil(); + + boolean procSftp = sftpUtil.sendFileSftp(sftpSendPath, locaSendPath, intrfcId); + + if(procSftp){//파일 전송 완료 + + for(File tempFile : fileList) { + if(tempFile.isFile()) { + tempPath = tempFile.getParent(); + fileName = tempFile.getName(); + if(fileName.contains(eofFileName)){ + Path file = Paths.get(locaSendPath+fileName.toString()); + Path movePath = Paths.get(sendSuccPath); + Files.move(file, movePath.resolve(file.getFileName())); + } else { + Path file = Paths.get(locaSendPath+fileName.toString()); + Path movePath = Paths.get(sendErrPath); + Files.move(file, movePath.resolve(file.getFileName())); + } + } + } + + System.out.println("========================================================================"); + System.out.println("SFTP Send Success"); + System.out.println("Interface ID = "+intrfcId); + System.out.println("Connection Time = "+sftpUtil.currentTime()); + System.out.println("========================================================================"); + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileName+".eof"); + linkVO.setCntcErrorMssage("Send Success"); + linkVO.setCntcSuccesAt("Y"); + linkVO.setCntcCnfirmAt("Y"); + linkVO.setCntcErrorLineco(totCnt); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + + } else { + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileName+".eof"); + linkVO.setCntcErrorMssage("Send Failure"); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkVO.setCntcErrorLineco(0); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + +//sftpSendImg + @Override + public void sftpSendImg(String seatNumber, String folderNumber, String intrfcId, String eofFileName, int totFileCnt, int totImgCnt) throws SQLException, IOException { + + try { + + //local + String sftpSendPath = Globals.topisSftpSendPath+seatNumber; + String imgSendPath = Globals.topisImgSendPath+folderNumber; + String imgErrPath = Globals.topisImgErrPath +folderNumber; + String imgSuccPath = Globals.topisImgSuccPath+folderNumber; + + File dirFile = new File(imgSendPath); + File []fileList = dirFile.listFiles(); + String fileName = ""; + + //SFTP + SFTPUtil sftpUtil = new SFTPUtil(); + + boolean procSftp = sftpUtil.sendFileSftp(sftpSendPath, imgSendPath, intrfcId); + + if(procSftp){//파일 전송 완료 + + for(File tempFile : fileList) { + if(tempFile.isFile()) { + fileName = tempFile.getName(); + if(fileName.contains(".jpg")){ + Path file = Paths.get(imgSendPath+fileName.toString()); + Path movePath = Paths.get(imgSuccPath); + Files.move(file, movePath.resolve(file.getFileName())); + } + } + } + + System.out.println("========================================================================"); + System.out.println("SFTP Send Success - Img File"); + System.out.println("Interface ID = "+intrfcId); + System.out.println("Connection Time = "+sftpUtil.currentTime()); + System.out.println("========================================================================"); + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileName+".eof"); + linkVO.setCntcErrorMssage("Send Success - Img File"); + linkVO.setCntcSuccesAt("Y"); + linkVO.setCntcCnfirmAt("Y"); + linkVO.setCntcErrorLineco(totImgCnt); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + + sftpSend(seatNumber, folderNumber, intrfcId, eofFileName, totFileCnt); + + } else { + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileName+".eof"); + linkVO.setCntcErrorMssage("Send Failure - Img File"); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkVO.setCntcErrorLineco(0); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + public void imgTransfer(String seatNumber, String folderNumber, String intrfcId, String eofFileName, int totFileCnt) throws SQLException, IOException { + + try { + + String imgSendPath = Globals.topisImgSendPath+folderNumber; + String imgSuccPath = Globals.topisImgSuccPath+folderNumber; + + //기존 이미지 파일 지우기 +// File dirFile0 = new File(imgSuccPath); +// File []fileList0 = dirFile0.listFiles(); +// String fileName0 = ""; +// +// for(File tempFile0 : fileList0) { +// if(tempFile0.isFile()) { +// fileName0 = tempFile0.getName(); +// if(fileName0.contains(".jpg") ){ +// EgovFileTool.deleteFile(imgSuccPath+fileName0.toString());//전일 성공한 파일 지우기 +// } +// } +// } + + SendLinkVO sendLinkVO = new SendLinkVO(); + SendLinkVO result = new SendLinkVO(); + + sendLinkVO.setFirstIndex(0); + sendLinkVO.setRecordCountPerPage(1000000000); + + List resultList = sendLinkMapper.selectLezDisclosureList(sendLinkVO);//TB_FIS_REGLT - 단속 + + int totImgCnt = 0; + for(int i=0; i> converters = new ArrayList>(); +// converters.add(new FormHttpMessageConverter()); +// converters.add(new StringHttpMessageConverter()); +// +// RestTemplate restTemplate = new RestTemplate(); +// restTemplate.setMessageConverters(converters); +// +// //parameter 세팅 +// +// MultiValueMap map = new LinkedMultiValueMap(); +// map.add("flag", "FIS"); +// map.add("regltId", regltId); +// +//// Map params = new HashMap(); +//// params.put("flag", "FIS"); +//// params.put("regltId", regltId); +// +// System.out.println("regltId = "+regltId); +// +// //REST API 호출 +// String resultApi = restTemplate.postForObject("http://192.168.0.41:20030/fis/rest/api/setRegltEvrFrndImageSave", map, String.class); +//// String resultApi = restTemplate.postForObject("http://192.168.0.41:20030/fis/rest/api/setRegltMaskImageSave", map, String.class); +// +// System.out.println("------------------ TEST 결과 ------------------"); +// System.out.println("resultApi = "+resultApi); +// +// String Json = "[{\"Product\" :\"Mouse\", \"Maker\":\"Samsung\", \"Price\":23000}," +// + "{ \"Product\" :\"KeyBoard\", \"Maker\":\"LG\", \"Price\":12000}," +// + "{ \"Product\" :\"HDD\", \"Maker\":\"Western Digital\", \"Price\":156000}]"; +// +// String resultA = ""; +// JSONArray ja = new JSONArray(Json); +// +// for (int t = 0; t < ja.length(); t++){ +// org.codehaus.jettison.json.JSONObject order = ja.getJSONObject(t); +// resultA += "product: " + order.getString("Product") + ", maker: " + order.getString("Maker") + +// ", price: " + order.getInt("Price") + "\n"; +// } +// +// System.out.println("resultA = "+resultA); + +// ex)2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +// RestTemplate restTemplate = new RestTemplate(); +// String loginUrl = "http://192.168.0.41:20030/fis/rest/api/setRegltEvrFrndImageSave"; +// String flag = "FIS"; +// MultiValueMap parameters = new LinkedMultiValueMap(); +// parameters.add("flag", flag); +// parameters.add("regltId", regltId); +// +//// ResponseEntity responseEntity = restTemplate.postForEntity(loginUrl, parameters, String.class); +//// Map responseEntity = restTemplate.postForObject(loginUrl, parameters, Map.class); +// Map responseEntity = restTemplate.postForObject(loginUrl, parameters, Map.class); +// System.out.println("responseEntity = "+responseEntity); + + + +// ex)333333333333333333333333333333333333333333333333333333333333333333333333333333333 +// HttpHeaders headers = new HttpHeaders(); +// headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); +// +// MultiValueMap map= new LinkedMultiValueMap(); +// map.add("flag", "FIS"); +// map.add("regltId", regltId); +// +// RestTemplate restTemplate = new RestTemplate(); +// +// HttpEntity> request = new HttpEntity>(map, headers); +// +// ResponseEntity response = restTemplate.postForEntity( "http://192.168.0.41:20030/fis/rest/api/setRegltEvrFrndImageSave", request , String.class ); +// System.out.println("response = "+response); + + +// ex)4444444444444444444444444444444444444444444444444444444444444444444444444444 +// MultiValueMap parameters = new LinkedMultiValueMap<>(); +// +// parameters.add("flag", "FIS"); +// parameters.add("regltId", regltId); +// +// HttpHeaders headers = new HttpHeaders(); +// //headers.add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); //전부다 String형일 때. RestTemplate 때문에 생략가능 +// //headers.add("Content-Type", "multipart/form-data; boundary=----WebKitFormB~~3"); //multipart/form-data 있는 경우 사용. RestTemplate 때문에 생략 가능 +// headers.add("x-waple-authorization", "API키값"); +// +// headers.add("accept", "application/json"); +// headers.add("Content-Type", "application/json;charset=UTF-8"); +// +// HttpEntity> request = new HttpEntity<>(parameters, headers); +// +// RestTemplate rest = new RestTemplate(); +// String result1 = rest.postForObject(new URI("http://192.168.0.41:20030/fis/rest/api/setRegltMaskImageSave"), request, String.class); +// //결과 {“result_code”:”200”,”cmid”:”20130314163439459”} +// +// // 결과값에 따른 처리 +// JSONObject feedback = (JSONObject) new JSONParser().parse(result1); +// String resultCode = (String) feedback.get("result_code"); +// System.out.println("resultCode = "+resultCode); + +// ex)55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +// String apiURL = "http://192.168.0.41:20030/fis/rest/api/setRegltEvrFrndImageSave"; +//// String apiURL = "http://192.168.0.41:20030/fis/rest/api/setRegltMaskImageSave"; +// URL url = new URL(apiURL); +// HttpURLConnection con = (HttpURLConnection)url.openConnection(); +// con.setRequestMethod("POST"); +//// con.setRequestProperty("X-Naver-Client-Id", clientId); +//// con.setRequestProperty("X-Naver-Client-Secret", clientSecret); +// // post request +// +// String postParams = "source=ko&target=en&flag=FIS®ltId=" + regltId; +// con.setDoOutput(true); +// DataOutputStream wr = new DataOutputStream(con.getOutputStream()); +// wr.writeBytes(postParams); +// wr.flush(); +// wr.close(); +// int responseCode = con.getResponseCode(); +// +// System.out.println("responseCode = "+responseCode); +// +// BufferedReader br; +// if(responseCode==200) { // 정상 호출 +// br = new BufferedReader(new InputStreamReader(con.getInputStream())); +// } else { // 에러 발생 +// br = new BufferedReader(new InputStreamReader(con.getErrorStream())); +// } +// String inputLine; +// StringBuffer response = new StringBuffer(); +// while ((inputLine = br.readLine()) != null) { +// response.append(inputLine); +// } +// br.close(); +// System.out.println(response.toString()); + +// File dirFile = new File(regltPhotoCours); +// File []fileList = dirFile.listFiles(); +// +// System.out.println("fileList.length = "+fileList.length); +// +// if(fileList != null){ +// for(File tempFile : fileList) { +// if(tempFile.isFile()) { +// EgovFileTool.copyFile(regltPhotoCours+regltPhotoNm, imgSendPath); +// File fileNm = new File(imgSendPath+regltPhotoNm); +// fileNm.renameTo(new File(imgSendPath+newImgNm)); +// } +// } +// } + + } else { + + //이미지 옮기고, 파일명 바꾸기 + File dirFile = new File(regltPhotoCours); + File []fileList = dirFile.listFiles(); + + if(fileList != null){ + for(File tempFile : fileList) { + if(tempFile.isFile()) { + EgovFileTool.copyFile(regltPhotoCours+regltPhotoNm, imgSendPath); + File fileNm = new File(imgSendPath+regltPhotoNm); + fileNm.renameTo(new File(imgSendPath+newImgNm)); + } + } + totImgCnt++; + } + } + } + //sftp 이미지 전송 + sftpSendImg(seatNumber, folderNumber, intrfcId, eofFileName, totFileCnt, totImgCnt); + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + SFTPUtil sftpUtil = new SFTPUtil(); + + System.out.println("========================================================================"); + System.out.println("Collect Failure - Img File"); + System.out.println("Interface ID = "+intrfcId); + System.out.println("Connection Time = "+sftpUtil.currentTime()); + System.out.println("========================================================================"); + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm(eofFileName+".eof"); + linkVO.setCntcErrorMssage("Collect Failure - Img File"); + linkVO.setCntcSuccesAt("N"); + linkVO.setCntcCnfirmAt("N"); + linkVO.setCntcErrorLineco(0); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + } + } + +//단속자료 송신 + @Override + public void lezDisclosure(String seatNumber, String intrfcId) throws SQLException, IOException { + + String folderNumber = seatNumber+"/"; + String locaSendPath = Globals.topisLocaSendPath+folderNumber; + + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat time = new SimpleDateFormat("HHmmss"); + long miSec = System.currentTimeMillis(); + String miS = String.valueOf(miSec).substring(10, 13); + String fileTime = date.format(today)+time.format(today)+miS; + String sidoCode = "11"; //시도코드 + String sigunguCode = "000";//시군구코드 + String cityCode = sidoCode+sigunguCode+"_"; + String eofFileName = cityCode+fileTime; + + SendLinkVO sendLinkVO = new SendLinkVO(); + + int totFileCnt = sendLinkMapper.selectLezDisclosureList_Cnt(sendLinkVO); + + SendLinkVO result = new SendLinkVO(); + + int increaseFindex = 100000; //시작 row + int recordCntPerPage = 100000; //파일당 line 갯수 + int rollCnt = totFileCnt/recordCntPerPage+1;//생성되는 파일 갯수 + int restRowCnt = totFileCnt%recordCntPerPage; //나머지 line + if(restRowCnt == 0){ + rollCnt = rollCnt-1; + } + + BufferedWriter writer = null; + BufferedWriter eofWriter = null; + +// for(int z=0; z0) && (j<10)){//csv 여러개 + volume = "_00"+j; + } else if((j>9) && (j<100)){ + volume = "_0"+j; + } else if((j>99) && (j<1000)){ + volume = "_"+Integer.toString(j); + } + + if(rollCnt < 2){//csv 한개 + volume = ""; + } + + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(locaSendPath+eofFileName+volume+".csv"), "UTF-8")); + + if(rollCnt < 2){//csv 한개 + + for(int n=0; n 0){//data가 존재 + writer.close(); + eofWriter.close(); + + imgTransfer(seatNumber, folderNumber, intrfcId, eofFileName, totFileCnt); + +// try { +// Thread.sleep(30000);//30초 +// } catch (InterruptedException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// sftpSend(seatNumber, folderNumber, intrfcId, eofFileName, totFileCnt);//파일전송부분 삭제, 이미지 전송후 파일 전송 - 뒤로 이동 + } + } + } + +//카메라 상태 정보 + @Override + public void lezCameraStatus(String seatNumber, String intrfcId) throws SQLException, IOException { + + String folderNumber = seatNumber+"/"; + String locaSendPath = Globals.topisLocaSendPath+folderNumber; + + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat time = new SimpleDateFormat("HHmmss"); + long miSec = System.currentTimeMillis(); + String miS = String.valueOf(miSec).substring(10, 13); + String fileTime = date.format(today)+time.format(today)+miS; + String sidoCode = "11"; //시도코드 + String sigunguCode = "000";//시군구코드 + String cityCode = sidoCode+sigunguCode+"_"; + String eofFileName = cityCode+fileTime; + + SendLinkVO sendLinkVO = new SendLinkVO(); + + int totCnt = sendLinkMapper.selectLezCameraStatusList_Cnt(sendLinkVO); + + SendLinkVO result = new SendLinkVO(); + + int increaseFindex = 100000; //시작 row + int recordCntPerPage = 100000; //파일당 line 갯수 + int rollCnt = totCnt/recordCntPerPage+1;//생성되는 파일 갯수 + int restRowCnt = totCnt%recordCntPerPage; //나머지 line + if(restRowCnt == 0){ + rollCnt = rollCnt-1; + } + + BufferedWriter writer = null; + BufferedWriter eofWriter = null; + +// for(int z=0; z0) && (j<10)){//csv 여러개 + volume = "_00"+j; + } else if((j>9) && (j<100)){ + volume = "_0"+j; + } else if((j>99) && (j<1000)){ + volume = "_"+Integer.toString(j); + } + + if(rollCnt < 2){//csv 한개 + volume = ""; + } + + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(locaSendPath+eofFileName+volume+".csv"), "UTF-8")); + + if(rollCnt < 2){//csv 한개 + + for(int n=0; n 0){//data가 존재 + writer.close(); + eofWriter.close(); + sftpSend(seatNumber, folderNumber, intrfcId, eofFileName, totCnt); + } + } + } + +//촬영차량 전일 정보 + @Override + public void lezRtviYdayLaneTraffic(String seatNumber, String intrfcId) throws SQLException, IOException { + + String folderNumber = seatNumber+"/"; + String locaSendPath = Globals.topisLocaSendPath+folderNumber; + + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat time = new SimpleDateFormat("HHmmss"); + long miSec = System.currentTimeMillis(); + String miS = String.valueOf(miSec).substring(10, 13); + String fileTime = date.format(today)+time.format(today)+miS; + String sidoCode = "11"; //시도코드 + String sigunguCode = "000";//시군구코드 + String cityCode = sidoCode+sigunguCode+"_"; + String eofFileName = cityCode+fileTime; + + SendLinkVO sendLinkVO = new SendLinkVO(); + + sendLinkMapper.deleteLezRtviYdayLaneTraffic(sendLinkVO);//TB_FIS_ENVRN_PBLCRP_BFRT_PASNG 지우기 + sendLinkMapper.insertLezRtviYdayLaneTraffic(sendLinkVO);//TB_FIS_VHCLE_NO_RECOG에서 가져와서 TB_FIS_ENVRN_PBLCRP_BFRT_PASNG에 넣기 + + int totCnt = sendLinkMapper.selectLezRtviYdayLaneTrafficList_Cnt(sendLinkVO); + + SendLinkVO result = new SendLinkVO(); + + int increaseFindex = 100000; //시작 row + int recordCntPerPage = 100000; //파일당 line 갯수 + int rollCnt = totCnt/recordCntPerPage+1;//생성되는 파일 갯수 + int restRowCnt = totCnt%recordCntPerPage; //나머지 line + if(restRowCnt == 0){ + rollCnt = rollCnt-1; + } + + BufferedWriter writer = null; + BufferedWriter eofWriter = null; + +// for(int z=0; z0) && (j<10)){//csv 여러개 + volume = "_00"+j; + } else if((j>9) && (j<100)){ + volume = "_0"+j; + } else if((j>99) && (j<1000)){ + volume = "_"+Integer.toString(j); + } + + if(rollCnt < 2){//csv 한개 + volume = ""; + } + + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(locaSendPath+eofFileName+volume+".csv"), "UTF-8")); + + if(rollCnt < 2){//csv 한개 + + for(int n=0; n 0){//data가 존재 + writer.close(); + eofWriter.close(); + sftpSend(seatNumber, folderNumber, intrfcId, eofFileName, totCnt); + } + } + } + +//통계용 데이터 정보 + @Override + public void lezRtviWeekLaneTraffic(String seatNumber, String intrfcId) throws SQLException, IOException { + + SendLinkVO sendOnVO = new SendLinkVO(); + SendLinkVO sendLinkVO = new SendLinkVO(); + SendLinkVO resultOn = new SendLinkVO(); + int resultOnCnt = 0; + + try { + + resultOnCnt = sendLinkMapper.selectLezRtviWeekLaneTraffic_OnCnt(sendOnVO); + + if(resultOnCnt == 1){ + resultOn = (SendLinkVO)sendLinkMapper.selectLezRtviWeekLaneTraffic_On(sendOnVO); + sendLinkVO.setStatsBeginDe(resultOn.getStatsBeginDe()); + sendLinkVO.setStatsEndDe(resultOn.getStatsEndDe()); + } + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + if(resultOnCnt == 1){//오늘일자 실행하는 데이터가 있음, Logic #0 + + String folderNumber = seatNumber+"/"; + String locaSendPath = Globals.topisLocaSendPath+folderNumber; + + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat time = new SimpleDateFormat("HHmmss"); + long miSec = System.currentTimeMillis(); + String miS = String.valueOf(miSec).substring(10, 13); + String fileTime = date.format(today)+time.format(today)+miS; + String sidoCode = "11"; //시도코드 + String sigunguCode = "000";//시군구코드 + String cityCode = sidoCode+sigunguCode+"_"; + String eofFileName = cityCode+fileTime; + +// SendLinkVO sendLinkVO = new SendLinkVO(); + + sendLinkMapper.deleteLezRtviWeekLaneTraffic(sendLinkVO);//TB_FIS_ENVRN_PBLCRP_WIK_PASNG 지우기 + sendLinkMapper.insertLezRtviWeekLaneTraffic(sendLinkVO);//TB_FIS_VHCLE_NO_RECOG에서 가져와서 TB_FIS_ENVRN_PBLCRP_WIK_PASNG에 넣기 + + int totCnt = sendLinkMapper.selectLezRtviWeekLaneTrafficList_Cnt(sendLinkVO); + + SendLinkVO result = new SendLinkVO(); + + int increaseFindex = 100000; //시작 row + int recordCntPerPage = 100000; //파일당 line 갯수 + int rollCnt = totCnt/recordCntPerPage+1;//생성되는 파일 갯수 + int restRowCnt = totCnt%recordCntPerPage; //나머지 line + if(restRowCnt == 0){ + rollCnt = rollCnt-1; + } + + BufferedWriter writer = null; + BufferedWriter eofWriter = null; + +// for(int z=0; z0) && (j<10)){//csv 여러개 + volume = "_00"+j; + } else if((j>9) && (j<100)){ + volume = "_0"+j; + } else if((j>99) && (j<1000)){ + volume = "_"+Integer.toString(j); + } + + if(rollCnt < 2){//csv 한개 + volume = ""; + } + + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(locaSendPath+eofFileName+volume+".csv"), "UTF-8")); + + if(rollCnt < 2){//csv 한개 + + for(int n=0; n 0){//data가 존재 + writer.close(); + eofWriter.close(); + sftpSend(seatNumber, folderNumber, intrfcId, eofFileName, totCnt); + } + } + } else {//오늘일자 실행하는 데이터가 있음, Logic #0 + + System.out.println("========================================================================"); + System.out.println("SFTP ENVIRONMENT LINK"); + System.out.println("THE SEND_DATE NOT MATCH"); + System.out.println("Interface ID = "+intrfcId); + System.out.println("========================================================================"); + + LinkVO linkVO = new LinkVO(); + linkVO.setIntrfcId(intrfcId); + linkVO.setCntcFileNm("-"); + linkVO.setCntcErrorMssage("Send Process Success : Send_date Not Match"); + linkVO.setCntcSuccesAt("Y"); + linkVO.setCntcCnfirmAt("N"); + linkVO.setCntcErrorLineco(0); + linkMapper.insertTbFisCntcErrorManage(linkVO);//Error table 에 저장 + }//오늘일자 실행하는 데이터가 없음 + } + +//차량번호 일괄송신 +// @Override +// public void lezNumplateAll() throws SQLException, IOException { +// +// String intrfcId = "LEZ_NUMPLATE_ALL";//인터페이스 아이디 +// String seatNumber = "49"; //폴더 번호 +// String folderNumber = seatNumber+"/"; +// String locaSendPath = Globals.topisLocaSendPath+folderNumber; +// +// Date today = new Date(); +// SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); +// SimpleDateFormat time = new SimpleDateFormat("HHmmss"); +// long miSec = System.currentTimeMillis(); +// String miS = String.valueOf(miSec).substring(10, 13); +// String fileTime = date.format(today)+time.format(today)+miS; +// String sidoCode = "11"; //시도코드 +// String sigunguCode = "000";//시군구코드 +// String cityCode = sidoCode+sigunguCode+"_"; +// String eofFileName = cityCode+fileTime; +// +// SendLinkVO sendLinkVO = new SendLinkVO(); +// +// int totCnt = sendLinkMapper.selectTbFisVhcleNoRecogList_Cnt(sendLinkVO); +// +// SendLinkVO result = new SendLinkVO(); +// +// int increaseFindex = 10000; //시작 row +// int recordCntPerPage = 10000; //파일당 line 갯수 +// int rollCnt = totCnt/recordCntPerPage+1;//생성되는 파일 갯수 +// int restRowCnt = totCnt%recordCntPerPage; //나머지 line +// if(restRowCnt == 0){ +// rollCnt = rollCnt-1; +// } +// +// BufferedWriter writer = null; +// BufferedWriter eofWriter = null; +// +//// for(int z=0; z0) && (j<10)){//csv 여러개 +// volume = "_00"+j; +// } else if((j>9) && (j<100)){ +// volume = "_0"+j; +// } else if((j>99) && (j<1000)){ +// volume = "_"+Integer.toString(j); +// } +// +// if(rollCnt < 2){//csv 한개 +// volume = ""; +// } +// +// writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(locaSendPath+eofFileName+volume+".csv"), "UTF-8")); +// +// if(rollCnt < 2){//csv 한개 +// +// for(int n=0; n 0){//data가 존재 +// writer.close(); +// eofWriter.close(); +// sftpSend(seatNumber, folderNumber, intrfcId, eofFileName, totCnt); +// } +// } +// } + +//Test +// @Override +// public void fromDbtoCsv() throws SQLException, IOException { +// +// String intrfcId = "TB_FIS_VHCLE_NO_RECOG"; +// String seatNumber = "50"; +// String folderNumber = seatNumber+"/"; +// String locaSendPath = Globals.topisLocaSendPath+folderNumber; +// +// Date today = new Date(); +// SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); +// SimpleDateFormat time = new SimpleDateFormat("HHmmss"); +// long miSec = System.currentTimeMillis(); +// String miS = String.valueOf(miSec).substring(10, 13); +// String fileTime = date.format(today)+time.format(today)+miS; +// String cityCode = "00001_";//시도코드 00 + 시군구코드 001 +// String eofFileName = cityCode+fileTime; +// +// SendLinkVO sendLinkVO = new SendLinkVO(); +// +// List resultList = sendLinkMapper.selectTbFisVhcleNoRecogList(sendLinkVO);//TB_FIS_VHCLE_NO_RECOG - 차량 번호 인식 +// +// SendLinkVO result = new SendLinkVO(); +// +// int listCnt = resultList.size(); +// int cutCnt = 10000; //파일당 line 갯수 +// int rollCnt = listCnt/cutCnt+1;//생성되는 파일 갯수 +// int restCnt = listCnt%cutCnt; //나머지 line +// +// if(restCnt == 0){ +// rollCnt = rollCnt-1; +// } +// +// BufferedWriter writer = null; +// BufferedWriter eofWriter = null; +// +// try { +// +//// CSVWriter cw = new CSVWriter(new OutputStreamWriter(new FileOutputStream(locaSendPath+"test.csv"), "UTF-8"), '^'); +// +// if(listCnt > 0){//data가 존재 +// +// Map hmap = null; +// +// if(rollCnt < 2){ +// +// writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(locaSendPath+eofFileName+".csv"), "UTF-8")); +// +// for(int i=0; i(); +// result = (SendLinkVO) resultList.get(i); +// +// String vhcleNoRecogId = result.getVhcleNoRecogId(); +// String cameraId = result.getCameraId(); +// String pasageTime = result.getPasageTime(); +// String vhcleNo = result.getVhcleNo(); +// String vhcleKnd = result.getVhcleKnd(); +// String vhcleColor = result.getVhcleColor(); +// String allImageCours = result.getAllImageCours(); +// String vhcleImageCours = result.getVhcleImageCours(); +// String nopltImageCours = result.getNopltImageCours(); +// String inputKnd = result.getInputKnd(); +// String vhcleDrc = result.getVhcleDrc(); +// String recogCnfdncdo = result.getRecogCnfdncdo(); +// String tfclneInfo = result.getTfclneInfo(); +// String vhcleLc = result.getVhcleLc(); +// String nopltLc = result.getNopltLc(); +// String recogPosesnTime = result.getRecogPosesnTime(); +// String regltTrgetSe = result.getRegltTrgetSe(); +// String vhcleNoRecogProcessSttus = result.getVhcleNoRecogProcessSttus(); +// String creatDt = result.getCreatDt(); +// String anprTrnsmisDt = result.getAnprTrnsmisDt(); +// String iotTrnsmisDt = result.getIotTrnsmisDt(); +// String regltUntrgetSe = result.getRegltUntrgetSe(); +// String manpRegistSttusCode = result.getManpRegistSttusCode(); +// +// if(result.getVhcleNoRecogId().equals(null) || result.getVhcleNoRecogId().equals("")){vhcleNoRecogId = "null";} +// if(result.getCameraId().equals(null) || result.getCameraId().equals("")){cameraId = "null";} +// if(result.getPasageTime().equals(null) || result.getPasageTime().equals("")){pasageTime = "null";} +// if(result.getVhcleNo().equals(null) || result.getVhcleNo().equals("")){vhcleNo = "null";} +// if(result.getVhcleKnd().equals(null) || result.getVhcleKnd().equals("")){vhcleKnd = "null";} +// if(result.getVhcleColor().equals(null) || result.getVhcleColor().equals("")){vhcleColor = "null";} +// if(result.getAllImageCours().equals(null) || result.getAllImageCours().equals("")){allImageCours = "null";} +// if(result.getVhcleImageCours().equals(null) || result.getVhcleImageCours().equals("")){vhcleImageCours = "null";} +// if(result.getNopltImageCours().equals(null) || result.getNopltImageCours().equals("")){nopltImageCours = "null";} +// if(result.getInputKnd().equals(null) || result.getInputKnd().equals("")){inputKnd = "null";} +// if(result.getVhcleDrc().equals(null) || result.getVhcleDrc().equals("")){vhcleDrc = "null";} +// if(result.getRecogCnfdncdo().equals(null) || result.getRecogCnfdncdo().equals("")){recogCnfdncdo = "null";} +// if(result.getTfclneInfo().equals(null) || result.getTfclneInfo().equals("")){tfclneInfo = "null";} +// if(result.getVhcleLc().equals(null) || result.getVhcleLc().equals("")){vhcleLc = "null";} +// if(result.getNopltLc().equals(null) || result.getNopltLc().equals("")){nopltLc = "null";} +// if(result.getRecogPosesnTime().equals(null) || result.getRecogPosesnTime().equals("")){recogPosesnTime = "null";} +// if(result.getRegltTrgetSe().equals(null) || result.getRegltTrgetSe().equals("")){regltTrgetSe = "null";} +// if(result.getVhcleNoRecogProcessSttus().equals(null) || result.getVhcleNoRecogProcessSttus().equals("")){vhcleNoRecogProcessSttus = "null";} +// if(result.getCreatDt().equals(null) || result.getCreatDt().equals("")){creatDt = "null";} +// if(result.getAnprTrnsmisDt().equals(null) || result.getAnprTrnsmisDt().equals("")){anprTrnsmisDt = "null";} +// if(result.getIotTrnsmisDt().equals(null) || result.getIotTrnsmisDt().equals("")){iotTrnsmisDt = "null";} +// if(result.getRegltUntrgetSe().equals(null) || result.getRegltUntrgetSe().equals("")){regltUntrgetSe = "null";} +// if(result.getManpRegistSttusCode().equals(null) || result.getManpRegistSttusCode().equals("")){manpRegistSttusCode = "null";} +// +// writer.write(String.valueOf(vhcleNoRecogId)+"^" +// +String.valueOf(cameraId)+"^" +// +String.valueOf(pasageTime)+"^" +// +String.valueOf(vhcleNo)+"^" +// +String.valueOf(vhcleKnd)+"^" +// +String.valueOf(vhcleColor)+"^" +// +String.valueOf(allImageCours)+"^" +// +String.valueOf(vhcleImageCours)+"^" +// +String.valueOf(nopltImageCours)+"^" +// +String.valueOf(inputKnd)+"^" +// +String.valueOf(vhcleDrc)+"^" +// +String.valueOf(recogCnfdncdo)+"^" +// +String.valueOf(tfclneInfo)+"^" +// +String.valueOf(vhcleLc)+"^" +// +String.valueOf(nopltLc)+"^" +// +String.valueOf(recogPosesnTime)+"^" +// +String.valueOf(regltTrgetSe)+"^" +// +String.valueOf(vhcleNoRecogProcessSttus)+"^" +// +String.valueOf(creatDt)+"^" +// +String.valueOf(anprTrnsmisDt)+"^" +// +String.valueOf(iotTrnsmisDt)+"^" +// +String.valueOf(regltUntrgetSe)+"^" +// +String.valueOf(manpRegistSttusCode)); +// +// writer.newLine(); +// } +// writer.close(); +// +// } else { +// +// int m = 0; +// String p = ""; +// for(int i=0; i0) && (j<10)){ +// p = "_00"+j; +// } else if((j>9) && (j<100)){ +// p = "_0"+j; +// } else if((j>99) && (j<1000)){ +// p = "_"+Integer.toString(j); +// } +// +// writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(locaSendPath+eofFileName+p+".csv"), "UTF-8")); +// +// if(rollCnt == i+1){//마지막 문서 +// cutCnt = restCnt; +// } +// +// for(int k=m; k(); +// result = (SendLinkVO) resultList.get(k); +// +// String vhcleNoRecogId = result.getVhcleNoRecogId(); +// String cameraId = result.getCameraId(); +// String pasageTime = result.getPasageTime(); +// String vhcleNo = result.getVhcleNo(); +// String vhcleKnd = result.getVhcleKnd(); +// String vhcleColor = result.getVhcleColor(); +// String allImageCours = result.getAllImageCours(); +// String vhcleImageCours = result.getVhcleImageCours(); +// String nopltImageCours = result.getNopltImageCours(); +// String inputKnd = result.getInputKnd(); +// String vhcleDrc = result.getVhcleDrc(); +// String recogCnfdncdo = result.getRecogCnfdncdo(); +// String tfclneInfo = result.getTfclneInfo(); +// String vhcleLc = result.getVhcleLc(); +// String nopltLc = result.getNopltLc(); +// String recogPosesnTime = result.getRecogPosesnTime(); +// String regltTrgetSe = result.getRegltTrgetSe(); +// String vhcleNoRecogProcessSttus = result.getVhcleNoRecogProcessSttus(); +// String creatDt = result.getCreatDt(); +// String anprTrnsmisDt = result.getAnprTrnsmisDt(); +// String iotTrnsmisDt = result.getIotTrnsmisDt(); +// String regltUntrgetSe = result.getRegltUntrgetSe(); +// String manpRegistSttusCode = result.getManpRegistSttusCode(); +// +// if(result.getVhcleNoRecogId().equals(null) || result.getVhcleNoRecogId().equals("")){vhcleNoRecogId = "null";} +// if(result.getCameraId().equals(null) || result.getCameraId().equals("")){cameraId = "null";} +// if(result.getPasageTime().equals(null) || result.getPasageTime().equals("")){pasageTime = "null";} +// if(result.getVhcleNo().equals(null) || result.getVhcleNo().equals("")){vhcleNo = "null";} +// if(result.getVhcleKnd().equals(null) || result.getVhcleKnd().equals("")){vhcleKnd = "null";} +// if(result.getVhcleColor().equals(null) || result.getVhcleColor().equals("")){vhcleColor = "null";} +// if(result.getAllImageCours().equals(null) || result.getAllImageCours().equals("")){allImageCours = "null";} +// if(result.getVhcleImageCours().equals(null) || result.getVhcleImageCours().equals("")){vhcleImageCours = "null";} +// if(result.getNopltImageCours().equals(null) || result.getNopltImageCours().equals("")){nopltImageCours = "null";} +// if(result.getInputKnd().equals(null) || result.getInputKnd().equals("")){inputKnd = "null";} +// if(result.getVhcleDrc().equals(null) || result.getVhcleDrc().equals("")){vhcleDrc = "null";} +// if(result.getRecogCnfdncdo().equals(null) || result.getRecogCnfdncdo().equals("")){recogCnfdncdo = "null";} +// if(result.getTfclneInfo().equals(null) || result.getTfclneInfo().equals("")){tfclneInfo = "null";} +// if(result.getVhcleLc().equals(null) || result.getVhcleLc().equals("")){vhcleLc = "null";} +// if(result.getNopltLc().equals(null) || result.getNopltLc().equals("")){nopltLc = "null";} +// if(result.getRecogPosesnTime().equals(null) || result.getRecogPosesnTime().equals("")){recogPosesnTime = "null";} +// if(result.getRegltTrgetSe().equals(null) || result.getRegltTrgetSe().equals("")){regltTrgetSe = "null";} +// if(result.getVhcleNoRecogProcessSttus().equals(null) || result.getVhcleNoRecogProcessSttus().equals("")){vhcleNoRecogProcessSttus = "null";} +// if(result.getCreatDt().equals(null) || result.getCreatDt().equals("")){creatDt = "null";} +// if(result.getAnprTrnsmisDt().equals(null) || result.getAnprTrnsmisDt().equals("")){anprTrnsmisDt = "null";} +// if(result.getIotTrnsmisDt().equals(null) || result.getIotTrnsmisDt().equals("")){iotTrnsmisDt = "null";} +// if(result.getRegltUntrgetSe().equals(null) || result.getRegltUntrgetSe().equals("")){regltUntrgetSe = "null";} +// if(result.getManpRegistSttusCode().equals(null) || result.getManpRegistSttusCode().equals("")){manpRegistSttusCode = "null";} +// +// writer.write(String.valueOf(vhcleNoRecogId)+"^" +// +String.valueOf(cameraId)+"^" +// +String.valueOf(pasageTime)+"^" +// +String.valueOf(vhcleNo)+"^" +// +String.valueOf(vhcleKnd)+"^" +// +String.valueOf(vhcleColor)+"^" +// +String.valueOf(allImageCours)+"^" +// +String.valueOf(vhcleImageCours)+"^" +// +String.valueOf(nopltImageCours)+"^" +// +String.valueOf(inputKnd)+"^" +// +String.valueOf(vhcleDrc)+"^" +// +String.valueOf(recogCnfdncdo)+"^" +// +String.valueOf(tfclneInfo)+"^" +// +String.valueOf(vhcleLc)+"^" +// +String.valueOf(nopltLc)+"^" +// +String.valueOf(recogPosesnTime)+"^" +// +String.valueOf(regltTrgetSe)+"^" +// +String.valueOf(vhcleNoRecogProcessSttus)+"^" +// +String.valueOf(creatDt)+"^" +// +String.valueOf(anprTrnsmisDt)+"^" +// +String.valueOf(iotTrnsmisDt)+"^" +// +String.valueOf(regltUntrgetSe)+"^" +// +String.valueOf(manpRegistSttusCode)); +// +// writer.newLine(); +// } +// +// writer.close(); +// m = m +cutCnt; +// } +// } +// +// eofWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(locaSendPath+eofFileName+".eof"), "UTF-8")); +// eofWriter.write(String.valueOf(listCnt)); +// +// } else { +// +// System.out.println("========================================================================"); +// System.out.println("SFTP ENVIRONMENT LINK"); +// System.out.println("THE SEND_FILE Cnt = 0"); +// System.out.println("Interface ID = "+intrfcId); +// System.out.println("========================================================================"); +// } +// +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// //무조건 CSVWriter 객체 close +// if(listCnt > 0){//data가 존재 +// writer.close(); +// eofWriter.close(); +// sftpSend(seatNumber, folderNumber, intrfcId, eofFileName, listCnt); +// } +// } +// } +} diff --git a/src/main/java/egovframework/itgcms/util/AccessLogIntercepter.java b/src/main/java/egovframework/itgcms/util/AccessLogIntercepter.java new file mode 100644 index 0000000..6f5f6cd --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/AccessLogIntercepter.java @@ -0,0 +1,34 @@ +/** + * @Class Name : AccessLoginIntercepter.java + * @Description : 권한, 접근제한, 로그등록 을 위한 controller 인터셉터 + * 수정일 수정자 수정내용 + * ------------------------------------------------------------- + * 2013. 6. 4. woonee 최초 생성 + * + */ +package egovframework.itgcms.util; + +import java.util.HashMap; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import org.springframework.stereotype.Service; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.ModelAndViewDefiningException; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; +import egovframework.itgcms.common.ItgMap; + +@Service +public class AccessLogIntercepter extends HandlerInterceptorAdapter { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + + String requestURI = CommUtil.isNull(request.getRequestURI(), ""); + String site = CommUtil.isNull(CommUtil.getSiteFile(), "web"); + site = site.replaceAll("\\n", ""); + + return super.preHandle(request, response, handler); + } +} diff --git a/src/main/java/egovframework/itgcms/util/AnsiX923Padding.java b/src/main/java/egovframework/itgcms/util/AnsiX923Padding.java new file mode 100644 index 0000000..79ac673 --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/AnsiX923Padding.java @@ -0,0 +1,63 @@ +package egovframework.itgcms.util; + +public class AnsiX923Padding { + + private String name = "ANSI-X.923-Padding"; + private final static byte PADDING_VALUE = 0x00; + + public static byte[] addPadding (byte[] source, int blockSize) { + int paddingCnt = source.length % blockSize; + byte[] paddingResult = null; + + if (paddingCnt != 0) { + paddingResult = new byte[source.length + (blockSize - paddingCnt)]; + System.arraycopy (source, 0, paddingResult, 0, source.length); + + int addPaddingCnt = blockSize - paddingCnt; + for (int i = 0; i < addPaddingCnt; i++) { + paddingResult[source.length + i] = PADDING_VALUE; + } + + paddingResult[paddingResult.length - 1] = (byte)addPaddingCnt; + }else { + paddingResult = source; + } + + return paddingResult; + } + + public static byte[] removePadding (byte[] source, int blockSize) { + byte[] paddingResult = null; + boolean isPadding = false; + + int lastValue = source[source.length - 1]; + if (lastValue < (blockSize - 1)) { + int zeroPaddingCount = lastValue - 1; + + for (int i =2; i < (zeroPaddingCount + 2); i++) { + if (source[source.length - i] != PADDING_VALUE) { + isPadding = false; + break; + } + } + + isPadding = true; + }else { + isPadding = false; + } + + if (isPadding) { + paddingResult = new byte[source.length - lastValue]; + System.arraycopy (source, 0, paddingResult, 0, paddingResult.length); + }else { + paddingResult = source; + } + + return paddingResult; + } + + public String getName() { + return name; + } + +} diff --git a/src/main/java/egovframework/itgcms/util/Client.java b/src/main/java/egovframework/itgcms/util/Client.java new file mode 100644 index 0000000..d700463 --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/Client.java @@ -0,0 +1,109 @@ +package egovframework.itgcms.util; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpConnectionManager; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.SimpleHttpConnectionManager; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.RequestEntity; +import org.apache.commons.httpclient.methods.StringRequestEntity; +import org.apache.commons.httpclient.params.HttpConnectionManagerParams; +import org.apache.commons.httpclient.params.HttpMethodParams; + +public abstract class Client { + + public static String doService(String serviceUrl, String requestXml) { + + String contentType, endoding, transactionUniqueId; + int connectTimeout, soTimeout; + { + contentType = "text/xml; charset=utf-8"; + endoding = "UTF-8"; + + connectTimeout = 5 * 60 * 1000; + soTimeout = 900 * 1000; + + SimpleDateFormat formatter = new SimpleDateFormat( + "yyyyMMddHHmmssSSS"); + transactionUniqueId = formatter.format(new Date()) + + String.valueOf(Math.random()).substring(2, 10); + } + + { + requestXml = requestXml.replace("#USE_SYSTEM_CODE#", "B553991TS"); + requestXml = requestXml.replace("#CERT_SERVER_ID#", "SVR1311000030"); + requestXml = requestXml.replace("#TRANSACTION_UNIQUE_ID#", transactionUniqueId); + requestXml = requestXml.replace("#USER_DEPT_CODE#", "1234567"); + requestXml = requestXml.replace("#USER_NAME#", "김공무"); + } + + PostMethod method = null; + + String responseXml = null; + + try { + + HttpClient client; + { + HttpConnectionManagerParams params = new HttpConnectionManagerParams(); + + params.setConnectionTimeout(connectTimeout); + params.setSoTimeout(soTimeout); + params.setTcpNoDelay(true); + + HttpConnectionManager conn = new SimpleHttpConnectionManager(); + conn.setParams(params); + client = new HttpClient(conn); + + method = new PostMethod(serviceUrl); + method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, + new DefaultHttpMethodRetryHandler(0, false)); + + method.setRequestHeader("Content-Type", contentType); + method.setRequestHeader("Connection", "close"); + + RequestEntity requestEntity = new StringRequestEntity( + requestXml, contentType, endoding); + method.setRequestEntity(requestEntity); + } + + int responseCode = client.executeMethod(method); + + { + InputStream is = method.getResponseBodyAsStream(); + try { + int readLen; + byte[] buffer = new byte[1024]; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + while ((readLen = is.read(buffer)) >= 0) { + baos.write(buffer, 0, readLen); + } + byte[] data = baos.toByteArray(); + responseXml = new String(data, endoding); + } finally { + is.close(); + } + } + + if (responseCode == HttpStatus.SC_OK) { + } else if (responseXml.indexOf("Fault>") > 0) { + } else { + } + + } catch (Throwable e) { + e.printStackTrace(); + } finally { + if (method != null) { + method.releaseConnection(); + } + } + + return responseXml; + } +} diff --git a/src/main/java/egovframework/itgcms/util/CommUtil.java b/src/main/java/egovframework/itgcms/util/CommUtil.java new file mode 100644 index 0000000..6031ed2 --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/CommUtil.java @@ -0,0 +1,3450 @@ +/** + * @Class Name : CommUtil.java + * @Description : 공통 메소드 + * 수정일 수정자 수정내용 + * ------------------------------------------------------------- + * 2013. 6. 4. woonee 최초 생성 + * 2014.10. 7. woonee 환경에 맞게 수정 + */ +package egovframework.itgcms.util; + +import java.awt.image.BufferedImage; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.mail.EmailException; +import org.apache.commons.mail.HtmlEmail; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.springframework.ui.ModelMap; +import org.springframework.util.StringUtils; +import org.springframework.web.context.ContextLoader; +import org.springframework.web.context.WebApplicationContext; +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.multipart.MultipartFile; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import com.ibm.icu.util.ChineseCalendar; + +import egovframework.com.utl.sim.service.EgovFileScrty; +import egovframework.itgcms.common.ItgMap; +import egovframework.itgcms.common.MngrSessionVO; +import egovframework.itgcms.common.UserSessionVO; +import egovframework.itgcms.core.board.service.BoardVO; +import egovframework.itgcms.core.board.service.MainBoardVO; +import egovframework.itgcms.core.menu.service.MngrMenuService; +import egovframework.itgcms.core.menu.service.MngrMenuVO; +//import egovframework.itgcms.core.stats.service.MngrStatsVO; +import egovframework.itgcms.core.systemconfig.service.SystemconfigVO; +import net.coobird.thumbnailator.Thumbnails; + +/** + * @author woonee + * 공통 유틸 클래스 + */ +public class CommUtil { + + private final static String DISALLOW_FILE_EXTENTION_PATTERN = "(php|php3|php4|asp|jsp|cgi|inc|pl|htm|html|js|java)"; + private static final Logger logger = LogManager.getLogger(CommUtil.class); + + public static void p(Object...args){ + for(int i = 0; i < args.length; i++){ + logger.info("인수 " + i + " : " + args[i].toString()); + } + } + + /** + * Object를 String 으로 변환 + * @param obj 문자열로된 Object + * @param defaultStr + * @return + */ + public static boolean isNull(String obj){ + boolean result = true; + if(obj != null && !"".equals(obj)){ + result = false; + } + return result; + } + + /** + * Object를 String 으로 변환 + * @param obj 문자열로된 Object + * @param defaultStr + * @return + */ + public static boolean isNull(Object obj){ + boolean result = true; + if(obj != null && !"".equals(obj)){ + if(!"".equals(String.valueOf(obj))){ + result = false; + } + } + return result; + } + + /** + * Object를 String 으로 변환 + * @param obj 문자열로된 Object + * @param defaultStr + * @return + */ + public static String isNull(String obj, String defaultStr){ + String result = defaultStr; + if(obj != null && !"".equals(obj)){ + result = String.valueOf(obj); + } + return result; + } + + /** + * Object를 String 으로 변환 + * @param obj 문자열로된 Object + * @param defaultStr + * @return + */ + public static String isNull(Object obj, String defaultStr){ + String result = defaultStr; + if(obj != null && !"".equals(obj)){ + if(!"".equals(String.valueOf(obj))){ + result = String.valueOf(obj); + } + } + return result.trim(); + } + + public static String getFilePathReplace(String str){ + str = str.replace("?", ""); + str = str.replace("[*]", ""); + str = str.replace("[\"]", ""); + return str; + } + + public static String[] strSplit(String str, String del){ + String[] strSplit = new String[100]; + if(!"".equals(str)){ + strSplit = str.split(del); + } + return strSplit; + } + + public static Map getParameterMap(HttpServletRequest request){ + + Map parameterMap = new HashMap(); + Enumeration enums = request.getParameterNames(); + while(enums.hasMoreElements()){ + String paramName = (String)enums.nextElement(); + String[] parameters = request.getParameterValues(paramName); + + // Parameter가 배열일 경우 + if(parameters.length > 1){ + parameterMap.put(paramName, parameters); + // Parameter가 배열이 아닌 경우 + }else{ + parameterMap.put(paramName, parameters[0]); + } + } + + return parameterMap; + } + + public static ItgMap getParameterEMap(HttpServletRequest request){ + + ItgMap parameterMap = new ItgMap(); + Enumeration enums = request.getParameterNames(); + while(enums.hasMoreElements()){ + String paramName = (String)enums.nextElement(); + String[] parameters = request.getParameterValues(paramName); + + // Parameter가 배열일 경우 + if(parameters.length > 1){ + parameterMap.put(paramName, parameters); + // Parameter가 배열이 아닌 경우 + }else{ + parameterMap.put(paramName, parameters[0]); + } + } + + return parameterMap; + } + + public static ItgMap getParameterEMap(HttpServletRequest request, String obj){ + + ItgMap parameterMap = new ItgMap(); + Enumeration enums = request.getParameterNames(); + while(enums.hasMoreElements()){ + String paramName = (String)enums.nextElement(); + String[] parameters = request.getParameterValues(paramName); + + // Parameter가 배열일 경우 + if(parameters.length > 1){ + parameterMap.put(paramName, parameters); + // Parameter가 배열이 아닌 경우 + }else{ + if(paramName.equals(obj)){ + parameterMap.put(paramName, parameters); + }else{ + parameterMap.put(paramName, parameters[0]); + } + } + } + + return parameterMap; + } + + public static Map getParameterMap(HttpServletRequest request, Object obj){ + Map parameterMap = new HashMap(); + + return parameterMap; + } + + /** + * 처리 완료 후 안내문구 및 이동페이지 설정, + * @param model ModelMap + * @param title : 페이지 타이틀 제목 (보통 오류또는 안내) + * @param msg : alert() 경고 문으로 보여줄 안내문, "" 값이면 경고창 없음 + * @param script : javascript 처리문장 (보통 location.href='~~~~') + * @return /comm/message/message + */ + public static String doComplete(ModelMap model, String title, String msg, String script) { + HashMap message = new HashMap(); + message.put("title",title); + message.put("msg",msg); + message.put("script",script); + message.put("type","alert"); + model.addAttribute("message", message); + return "/comm/message/message"; + } + + /** + * 처리 완료 후 안내문구 및 이동페이지 설정, + * @param model ModelMap + * @param title : 페이지 타이틀 제목 (보통 오류또는 안내) + * @param msg : alert() 경고 문으로 보여줄 안내문, "" 값이면 경고창 없음 + * @param script : javascript 처리문장 (보통 location.href='~~~~') + * @return /common/message/message + */ + public static String doCompleteUrl(ModelMap model, String title, String msg, String url) { + HashMap message = new HashMap(); + message.put("title",title); + message.put("msg",msg); + message.put("url",url); + model.addAttribute("message", message); + return "/comm/message/messageForm"; + } + + /** + * 처리후 confirm 함수를 이용해 사용자 선택을 받아서 처리 함l;/; + * @param model + * @param title 제목 + * @param msg confirm 질문 내용 + * @param okUrl [확인]버튼 클릭시 스크립트 + * @param cancelUrl [아니오]버튼 클릭시 스크립트 + * @return + */ + public static String doCompleteConfirm(ModelMap model, String title, String msg, String okUrl, String cancelUrl) { + HashMap message = new HashMap(); + message.put("title",title); + message.put("msg",msg); + message.put("script",""); + message.put("okUrl",okUrl); + message.put("cancelUrl",cancelUrl); + message.put("type","confirm"); + model.addAttribute("message", message); + return "/comm/message/message"; + } + + public static String chkVal(ModelMap model, String compare1, String compare2, String strMsg) { + HashMap message = new HashMap(); + message.put("title","오류"); + message.put("msg",strMsg); + message.put("script","history.back();"); + model.addAttribute("message", message); + compare1 = isNull(compare1, ""); + compare2 = isNull(compare2, ""); + if(compare1.equals(compare2)){ + return ""; + }else{ + return "/comm/message/message"; + } + } + /** + * 관리자 로그인 여부 확인 + * @return + */ + public static boolean isMngrLogin(){ + MngrSessionVO mngrSessionVO = (MngrSessionVO)RequestContextHolder.getRequestAttributes().getAttribute("mngrSessionVO", RequestAttributes.SCOPE_SESSION); + return mngrSessionVO != null; + } + + /** + * 관리자용 아이디 가져오기 + * @return + */ + public static String getMngrMemId(){ + MngrSessionVO mngrSessionVO = (MngrSessionVO)RequestContextHolder.getRequestAttributes().getAttribute("mngrSessionVO", RequestAttributes.SCOPE_SESSION); + return ( mngrSessionVO == null) ? "" : mngrSessionVO.getId(); + } + + /** + * 관리자용 세션 VO + * mngrSessionVO + * @return mngrSessionVO + */ + public static MngrSessionVO getMngrSessionVO(){ + return (MngrSessionVO) RequestContextHolder.getRequestAttributes().getAttribute("mngrSessionVO", RequestAttributes.SCOPE_SESSION); + } + + /** + * 사용자 로그인 여부 확인 + * @return + */ + public static boolean isUserLogin() { + UserSessionVO userSessionVO = (UserSessionVO) RequestContextHolder.getRequestAttributes().getAttribute("userSessionVO", RequestAttributes.SCOPE_SESSION); + return userSessionVO != null; + } + + /** + * 사용자 로그인 아이지 가져오기 + * @return + */ + public static String getUserMemId(){ + UserSessionVO userSessionVO = (UserSessionVO)RequestContextHolder.getRequestAttributes().getAttribute("userSessionVO", RequestAttributes.SCOPE_SESSION); + return (userSessionVO == null)? "" : userSessionVO.getId(); + } + + /** + * 사용자 로그인 sessionVO 조회 + * @return + */ + public static UserSessionVO getUserSessionVO(){ + //TODO 사용자 인증 추가 후 삭제 + UserSessionVO userSessionVO = (UserSessionVO) RequestContextHolder.getRequestAttributes().getAttribute("userSessionVO", RequestAttributes.SCOPE_SESSION); + return userSessionVO; + } + + + /** + * Ajax json 등을 출력 + * @param json + * @param response + * @throws IOException + */ + public static void printWriter(String json, HttpServletResponse response)throws IOException{ + response.setCharacterEncoding("UTF-8"); + response.setHeader("Cache-Control", "no-cache"); + response.getWriter().println(json); + response.getWriter().flush(); + response.getWriter().close(); + } + + /** + * Object 를 Map으로 변경 + * 주로 VO 에서 Map 으로 변경해서 json사용시 필요함 + * @param obj + * @return map + */ + public static Map ConverObjectToMap(Object obj){ + try { + //Field[] fields = obj.getClass().getFields(); //private field는 나오지 않음. + java.lang.reflect.Field[] fields = obj.getClass().getDeclaredFields(); + Map resultMap = new HashMap(); + for(int i=0; i<=fields.length-1;i++){ + fields[i].setAccessible(true); + resultMap.put(fields[i].getName(), fields[i].get(obj)); + } + return resultMap; + } catch (IllegalArgumentException e) { + logger.error("예외 상황 발생"); + } catch (IllegalAccessException e) { + logger.error("예외 상황 발생"); + } + return null; + } + + /** + * XSS 방어 용으로 " 을 " 로 변경한다. + * @param str + * @return + */ + public static String quot(String str){ + String returnValue = ""; + if(!"".equals(str)){ + returnValue = str.replaceAll("\"", """); + } + return returnValue; + } + + /** + * 정규식 검사 메소드(문자열이 지정된 패턴과 일치하는지 여부 검사) + * @param ptn 패턴 + * @param str 검사할 문자열 + * @return true | false + */ + public static boolean regEx(String ptn, String str){ + java.util.regex.Pattern p = java.util.regex.Pattern.compile(ptn,java.util.regex.Pattern.CASE_INSENSITIVE | java.util.regex.Pattern.MULTILINE ); + java.util.regex.Matcher m = p.matcher(str); + return m.find(); + } + + /** + * 정규식 검사 메소드(문자열중 패턴과 일치하는 부분을 대체 문자열로 치환) + * @param ptn 패턴 + * @param str 검사할 문자열 + * @param replaceStr 대체할 문자열 + * @return 변경된 문자열 + */ + public static String regEx(String ptn, String str, String replaceStr){ + java.util.regex.Pattern p = java.util.regex.Pattern.compile(ptn,java.util.regex.Pattern.CASE_INSENSITIVE | java.util.regex.Pattern.MULTILINE ); + java.util.regex.Matcher m = p.matcher(str); + m.replaceAll(replaceStr); + return m.replaceAll(replaceStr); + } + + public static String stripTag(String contents){ + if("".equals(isNull(contents, ""))) return ""; + contents = regEx("(?:)|(?:<(?:[^>'\"]*|\".*?\"|'.*?')+>)", contents, ""); + return contents.replaceAll(" "," "); + } + /** + * 3항 연산식 tagLib에서 사용 + * @param boo + * @param tureResult + * @param falseResult + * @return + */ + public static String IIF(boolean boo, String tureResult, String falseResult){ + return (boo)?tureResult:falseResult; + } + + /** + * form select box selected 설정 TagLib에서도 사용 반드시 escapeXml="false" 추가 + * @param pCode 부모코드값 + * @param sCode select code 값 + * @return selected = "selected" OR ""; + */ + public static String codeSelectTag(String val, String compare1){ + String returnValue = ""; + if(isNull(val, "").equals(isNull(compare1,"")) ){ + returnValue = "selected=\"selected\""; + } + return returnValue; + } + + /** + * form select box selected 설정 TagLib에서도 사용 반드시 escapeXml="false" 추가 + * @param val 원본 변수값 + * @param compare1 비교 변수값 + * @return selected = "selected" OR ""; + */ + public static String selected(String val, String compare1){ + String returnValue = ""; + if(isNull(val, "").equals(isNull(compare1,"")) ){ + returnValue = "selected=\"selected\""; + } + return returnValue; + } + /** + * form radio, checkbox checked 설정 반드시 escapeXml="false" 추가 + * @param val 원본 변수값 + * @param compare1 비교 변수값 + * @return checked="checked" OR "" + */ + public static String checked(String val, String compare1){ + String returnValue = ""; + if(isNull(val, "").equals(isNull(compare1,"")) ){ + returnValue = "checked=\"checked\""; + } + return returnValue; + } + + /** + * @param val 원본 변수값 + * @param compare1 비교 변수값 + * @return readonly="readonly" OR "" + */ + public static String readOnly(String val, String compare1){ + String returnValue = ""; + if(isNull(val, "").equals(isNull(compare1,"")) ){ + returnValue = "disabled"; + } + return returnValue; + } + /** + * 사이트의 공통 업로드 폴더 : 최종 포팅시에는 자동으로 구해지지만, 개발시에는 하드코딩해야함 + * @param request + * @return + */ + public static String getFileRoot() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String path = request.getSession().getServletContext().getRealPath(""); + path = getFilePathReplace(path); + path = new java.io.File(new java.io.File(path).getParent()) + System.getProperty("file.separator") + "upload_data"; + path = getFilePathReplace(path); + return path; + } + + public static String getContextRoot(){ + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + return request.getSession().getServletContext().getRealPath(""); + } + + + /**() + * fieldName 에 해당하는 업로드 파일정보를 구한다 + * @param files + * @param fieldName <input type="file" name="fieldName"~ + * @param fileOrder 다중파일업로드일경우 order + * @param storePath 업로드 폴더 공통 (CommUtil.getRootFile(request) + "하위폴더") + * @return + hm.put("F_SAVENAME", newName + "." + fileExt); + hm.put("F_EXT", fileExt); + hm.put("F_FILESIZE", _size); + hm.put("F_ORGNAME", originalFileName); + * @throws IOException + */ + public static HashMap fileUpload(Map files, String fieldName, String storePath) throws IOException { + return fileUpload(files,fieldName,storePath, ""); + } + + //특정폴더에 업로드 할경우 4번째 매개변수에 폴더 지정 + public static HashMap fileUpload(Map files, String fieldName, String storePath, String path) throws IOException { + if("".equals(path)){ + storePath = getFileRoot() + System.getProperty("file.separator") + storePath; + }else{ + storePath = path + System.getProperty("file.separator") + storePath; + } + storePath = getFilePathReplace(storePath); + File saveFolder = new File(storePath); + + if (!saveFolder.exists() || saveFolder.isFile()) { + saveFolder.setExecutable(false, true); + saveFolder.setReadable(true); + saveFolder.setWritable(true, true); + saveFolder.mkdirs(); + } + + Iterator> itr = files.entrySet().iterator(); + MultipartFile file; + String filePath = ""; + HashMap hm = null; + + while (itr.hasNext()) { + Entry entry = itr.next(); + + file = entry.getValue(); + String originalFileName = file.getOriginalFilename(); + + //-------------------------------------- + // 원 파일명이 없는 경우 처리 + // (첨부가 되지 않은 input file type) + //-------------------------------------- + if ("".equals(originalFileName)) { + continue; + } + ////------------------------------------ + if(fieldName.equals(file.getName())){ + hm = new HashMap(); + int index = originalFileName.lastIndexOf("."); + String fileExt = originalFileName.substring(index + 1); + String newName = getUniqueFileName(storePath, fileExt); //날짜 20121011+랜덤8자리 + long _size = file.getSize(); + + filePath = storePath + File.separator + newName + "." + fileExt ; + filePath = getFilePathReplace(filePath); + file.transferTo(new File(filePath)); + + hm.put("F_SAVENAME", newName + "." + fileExt); + hm.put("F_EXT", fileExt); + hm.put("F_FILESIZE", _size); + hm.put("F_ORGNAME", originalFileName); + } + } + + return hm; + } + + public static HashMap fileUploadImageThumbail ( + Map files, String fieldName, String storePath, + String bcThumbwidth, String bcThumbheight, boolean ratio) throws IOException { + + storePath = getFileRoot() + System.getProperty("file.separator") + storePath; + storePath = getFilePathReplace(storePath); + File saveFolder = new File(storePath); + + if (!saveFolder.exists() || saveFolder.isFile()) { + saveFolder.setExecutable(false, true); + saveFolder.setReadable(true); + saveFolder.setWritable(true, true); + saveFolder.mkdirs(); + } + + Iterator> itr = files.entrySet().iterator(); + MultipartFile file; + String filePath = ""; + HashMap hm = null; + while (itr.hasNext()) { + Entry entry = itr.next(); + + file = entry.getValue(); + String originalFileName = file.getOriginalFilename(); + + //-------------------------------------- + // 원 파일명이 없는 경우 처리 + // (첨부가 되지 않은 input file type) + //-------------------------------------- + if ("".equals(originalFileName)) { + continue; + } + ////------------------------------------ + if(fieldName.equals(file.getName())){ + hm = new HashMap(); + int index = originalFileName.lastIndexOf("."); + String fileExt = originalFileName.substring(index + 1); + String newName = getUniqueFileName(storePath, fileExt); //날짜 20121011+랜덤8자리 + long _size = file.getSize(); + + filePath = storePath + File.separator + newName + "." + fileExt ; + filePath = getFilePathReplace(filePath); + file.transferTo(new File(filePath)); + + thumbnail(storePath, newName+"."+fileExt, "B", Integer.parseInt(bcThumbwidth), Integer.parseInt(bcThumbheight), ratio) ; + + hm.put("F_SAVENAME", newName + "." + fileExt); + hm.put("F_EXT", fileExt); + hm.put("F_FILESIZE", _size); + hm.put("F_ORGNAME", originalFileName); + } + } + + return hm; + } + + + /** + * 해당 경로에 중복되지 않는 파일명을 구한다. + * @param path 전체 풀 경로 + * @param fileExt 첨부파일의 호 + * @return + */ + public static String getUniqueFileName(String path, String fileExt){ + String filename = ""; + while(true){ + filename = "f" + getDatePattern("yyyyMMdd")+getRandomString(4); + String fullFileName = getFilePathReplace(path + System.getProperty("file.separator") + filename + "." + fileExt); + if(!new File(fullFileName).exists()){ + break; + } + } + return filename; + } + + /** + * 오늘날짜를 패턴에 맞게 가져오기 + * @param pattern (yyyy-MM-dd : 2019-02-28 , yyyy-MM-dd HH:mm:ss.SSS : 2019-02-28 01:59:28.002 + * @return + */ + public static String getDatePattern(String pattern){ + String rtnStr = null; + try { + java.text.SimpleDateFormat sdfCurrent = new java.text.SimpleDateFormat(pattern, Locale.KOREA); + java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis()); + rtnStr = sdfCurrent.format(ts.getTime()); + } catch (IllegalArgumentException e) { + logger.error("예외 상황 발생"); + } + return rtnStr; + } + + /** + * 입력된 날짜를 패턴에 맞게 가져온다 + * @param pattern (yyyy-MM-dd : 2019-02-28 , yyyy-MM-dd HH:mm:ss.SSS : 2019-02-28 01:59:28.002 + * @return + */ + public static String printDatePattern(String date, String pattern){ + if(date == null) return ""; + String rtnStr = null; + Date date1 = null; + Calendar cal1 = Calendar.getInstance(); + java.text.SimpleDateFormat sdfCurrent = new java.text.SimpleDateFormat(pattern, Locale.KOREA); + if(checkDate(date,pattern)){ + try { + date1 = sdfCurrent.parse(date); + rtnStr = sdfCurrent.format(date1); + } catch (ParseException e) { + logger.error("예외 상황 발생"); + } catch (IllegalArgumentException e) { + logger.error("예외 상황 발생"); + } + } + + if(date1 == null && checkDate2(date)){ + java.text.SimpleDateFormat sdfCurrent2 = new java.text.SimpleDateFormat("yyyy-M-d.HH.mm.ss.S", Locale.KOREA); + try { + date1 = sdfCurrent2.parse(date); + rtnStr = sdfCurrent.format(date1); + } catch (ParseException e) { + logger.error("예외 상황 발생"); + } catch (IllegalArgumentException e) { + logger.error("예외 상황 발생"); + } + } + if(date1 == null) return date; + cal1.setTime(date1); + return sdfCurrent.format(new java.sql.Timestamp(cal1.getTimeInMillis())); + } + + public static boolean checkDate(String str, String pattern){ + + boolean dateValidity = true; + SimpleDateFormat df = new SimpleDateFormat(pattern,Locale.KOREA); //20041102101244 + df.setLenient(true); // false 로 설정해야 엄밀한 해석을 함. + try { + Date dt = df.parse(str); + }catch(ParseException pe){ + dateValidity = false; + }catch(IllegalArgumentException ae){ + dateValidity = false; + } + return dateValidity; + } + + public static boolean checkDate2(String str){ + boolean dateValidity = true; + SimpleDateFormat df = new SimpleDateFormat("yyyy-M-d.HH.mm.ss.S",Locale.KOREA); //20041102101244 + df.setLenient(false); // false 로 설정해야 엄밀한 해석을 함. + try { + Date dt = df.parse(str); + }catch(ParseException pe){ + dateValidity = false; + }catch(IllegalArgumentException ae){ + dateValidity = false; + } + return dateValidity; + } + + + /** + * date형식을 가진 String value의 패턴을 변경한다. + * @param stringDate date형식을 가진 String value(yyyy-MM-dd : 2019-02-28 , yyyy-MM-dd HH:mm:ss.SSS : 2019-02-28 01:59:28.002 + * @param old_pattern 이전 패턴 + * @param new_pattern 변경할 패턴 + * @return stringDate + */ + public static String convertDatePattern(String stringDate, String old_pattern, String new_pattern){ + SimpleDateFormat formatter = new SimpleDateFormat(old_pattern,new Locale("en", "US")); + try { + Date time = formatter.parse(stringDate); + return new SimpleDateFormat(new_pattern).format(time); + } catch (ParseException e) { + logger.error("예외 상황 발생"); + } + return stringDate; + } + + + /** + * 영문 대, 소문자, 숫자가 조합된 랜덤한 문자열을 구한다. + * @param length 구하고자 하는 문자열 갯수 + * @return 입력된 길이의 랜덤 문자열 + */ + public static String getRandomString(int length){ + String[] arrString = {"0","1","2","3","4","5","6","7","8","9","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","x","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","X"}; + java.util.Random rnd = new java.util.Random(); + String returnValue = ""; + for(int i =0; i< length; i++){ + returnValue+= arrString[rnd.nextInt(arrString.length-1)]; + } + return returnValue; + + } + + /** + * 첨부파일을 서버에 저장하기전에 파일크기 및 확장자를 먼저 검사해야한다. + * @param files + * @param size 제한용량(Byte 단위) + * @param allowExt 첨부할 수 있는 파일형식입력 정규식형식(xls|xlsx|doc|docx) + * @return 0: 정상 , 1: 사이즈 오류, 2: 확장자 오류(금지된 확장자이거나 isImage true일때 이미지가 아닌경우) 3:확장자가 없음 4:이미지파일이 아님(isImage true일경우만) + * @throws IOException + */ + public static String fileUploadBeforeCheck(Map files, long size, String allowExt, boolean imageOnly) throws IOException{ + Iterator> itr = files.entrySet().iterator(); + MultipartFile file; + while (itr.hasNext()) { + Entry entry = itr.next(); + + file = entry.getValue(); + String orginFileName = file.getOriginalFilename(); + + //-------------------------------------- + // 원 파일명이 없는 경우 처리 + // (첨부가 되지 않은 input file type) + //-------------------------------------- + if ("".equals(orginFileName)) { + continue; + } + ////------------------------------------ + + long _size = file.getSize(); + + int index = orginFileName.lastIndexOf("."); + + if(index < 0){ return "확장자가 없는 파일은 첨부 할 수 없습니다." ; } //확장자 없는 파일 첨부 금지. + + String fileExt = orginFileName.substring(index + 1); + if(_size > size){ + return String.format("첨부파일 용량이 초과 했습니다.\\n 용량제한 : %s, 첨부파일 용량 : %s ", fileSize(size), fileSize(_size)); + } + if(regEx(DISALLOW_FILE_EXTENTION_PATTERN, fileExt.toLowerCase()) || fileExt.length() > 19 ){ //금지확장자에 해당하면 + return "업로드 할 수 없는 확장자 입니다."; + } + if("".equals(fileExt)){ + return "확장자가 없는 파일은 첨부 할 수 없습니다."; + } + if(!regEx(allowExt,fileExt.toLowerCase())){ + return String.format("첨부 가능한 파일 형식이 아닙니다.\\n가능한 파일 형식 : %s", allowExt.replace("|", ",")); + } + if(imageOnly && // 이미지만 받도록 설정된 경우 + !regEx("(image.jpg|image.jpeg|image.gif|image.png|image.bmp|image.x-png|image.pjpeg)",file.getContentType().toLowerCase())){ + return "이미지 파일만 첨부가 가능합니다."; + } + } + return ""; + } + + /** + * 지정된 이름의 파일 확장자를 검사함 + * @param files + * @param fieldName files, long size, String fieldName, String allowExt, boolean imageOnly, String required) throws IOException{ + Iterator> itr = files.entrySet().iterator(); + MultipartFile file; + boolean isRequired = false; + while (itr.hasNext()) { + Entry entry = itr.next(); + + file = entry.getValue(); + String orginFileName = file.getOriginalFilename(); + + //-------------------------------------- + // 원 파일명이 없는 경우 처리 + // (첨부가 되지 않은 input file type) + //-------------------------------------- + if ("".equals(orginFileName)) { + continue; + } + ////------------------------------------ + + long _size = file.getSize(); + int index = orginFileName.lastIndexOf("."); + if(fieldName.equals(file.getName())){ + isRequired = true; + if(index < 0){ return "확장자가 없는 파일은 첨부 할 수 없습니다." ; } //확장자 없는 파일 첨부 금지. + + String fileExt = orginFileName.substring(index + 1); + if(regEx(DISALLOW_FILE_EXTENTION_PATTERN, fileExt.toLowerCase()) || fileExt.length() > 19 ){ //금지확장자에 해당하면 + return "업로드 할 수 없는 확장자 입니다."; + } + if(_size > size){ + return String.format("첨부파일 용량이 초과 했습니다.\\n 용량제한 : %s, 첨부파일 용량 : %s ", fileSize(size), fileSize(_size)); + } + if("".equals(fileExt)){ + return "확장자가 없는 파일은 첨부 할 수 없습니다."; + } + if(!regEx(allowExt,fileExt.toLowerCase())){ + return String.format("첨부 가능한 파일 형식이 아닙니다.\\n가능한 파일 형식 : %s", allowExt.replace("|", ",")); + } + if(imageOnly && // 이미지만 받도록 설정된 경우 + !regEx("(image.jpg|image.jpeg|image.gif|image.png|image.bmp|image.x-png|image.pjpeg)",file.getContentType().toLowerCase())){ + return "이미지 파일만 첨부가 가능합니다."; + } + } + } + if("required".equals(required ) && isRequired == false){ + return "파일을 첨부 해 주세요."; + } + return ""; + } + + public static String fileSize(long fileSize ){ + String strResult = ""; + if(fileSize> 1024000000){ + fileSize = fileSize / 1024000000; + strResult = fileSize + " GB"; + }else if(fileSize > 1024000){ + fileSize = fileSize / 1024000; + strResult = fileSize + " MB"; + }else if(fileSize > 1024){ + fileSize = fileSize / 1024; + strResult = fileSize + " KB"; + }else{ + strResult = fileSize + " B"; + } + return strResult; + } + + /** + * oracle의 DE_CODE 함수로 deCode("직업", "0,학생,1,회사원,2,주부,3,프리랜서","백수"); + * @param compareStr 비교할 변수 + * @param targetPattern 대상이 되는 값과 리턴값 패턴, 콤마로 구분되면 홀수는 비교변수, 짝수는 그에 해당하는 리턴값. + * @param otherwise 같은 값이 없을때 가져올 값 + * @return 패턴의 갯수가 쌍이아니면 NaN 리턴, compareStr 과 targetPattern 값이 같을때 지정한 리턴 값 + */ + public static String deCode(String compareStr, String targetPattern, String otherwiseStr ){ + String retStr = ""; + String[] arrArgs = targetPattern.split(","); + String tmpStr = ""; + if(arrArgs.length % 2 == 0){ + for(int i = 0; i < arrArgs.length; i+=2){ + tmpStr = arrArgs[i]; + if(compareStr.equals(tmpStr)){ + retStr = arrArgs[i +1]; + return retStr; + } + } + retStr = otherwiseStr; + } + return retStr; + } + + /** + * 숫자앞에 0 붙이기 + * @param no + * @return + */ + public static String getZeroPlus(int no){ + return (no < 10 )? "0" + String.valueOf(no) : String.valueOf(no); + } + + /** + * (length - str.length) 만큼 앞에 0을 추가한다. + * @param str + * @param length + * @return + */ + public static String getZeroPlus(String str, int length) { + String temp = ""; + for (int i = str.length(); i < length; i++) + temp += "0"; + temp += str; + return temp; + } + + /** + * 파일을 삭제한다. + * @param fullpath 파일경로 및 파일명 + * @throws IOException + */ + public static void fileDel(String fullpath) throws IOException{ + fullpath = getFilePathReplace(fullpath); + java.io.File delFile = new java.io.File(fullpath); + if(delFile.exists()){ + delFile.delete(); + } + } + + /** + * String.replaceAll 메소드를 사용하는데, jstl에서 사용하기 위해 추가함. + * @param strSource + * @param strPattern + * @param strResult + * @return + */ + public static String replaceAll(String strSource, String strPattern, String strResult){ + return strSource.replaceAll(strPattern, strResult); + } + + /** + * 입력된 날짜(yyyy-MM-dd)형식이 유효한 날짜인지를 검사한다. + * @param dt yyyy-MM-dd 형식의 날짜형식 문자열 + * @return 유효한 날짜 true, 아니면 false + */ + public static boolean isDate(String dt){ + try{ + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + format.setLenient(false); + format.parse(dt); + } catch (ParseException e) { + return false; + } catch (IllegalArgumentException e) { + return false; + } + return true; + } + + /** + * 입력된 날짜(yyyy-MM-dd)형식이 유효한 날짜인지를 검사한다. + * @param m : 월, d : 일, y : 연 + * @return 유효한 날짜 true, 아니면 false + */ + public static boolean isDate(int m, int d, int y) + { + m -= 1; + Calendar c = Calendar.getInstance(); + c.setLenient(false); + try{ + c.set(y,m,d); + java.util.Date dt = c.getTime(); + }catch (IllegalArgumentException e){ + return false; + } + return true; + } + + /** + * 음력 공휴일을 체크한다 + * @param dt : 체크할 날짜 ( 날짜포맷 : yyyy-MM-dd) + * @return + */ + public static boolean isLunar(String dt) + { + boolean result = false ; + // 음력 공휴일 목록 + String[] arrLunar = { + "01-01" // 설날 2 + , "01-02" // 설날 3 + , "04-08" // 부처님 오신날 + , "08-14" // 추석 1 + , "08-15" // 추석 2 + , "08-16" // 추석 3 + , "12-31" // 설날 1 + } ; + + ChineseCalendar chinaCal = new ChineseCalendar(); + Calendar cal = Calendar.getInstance() ; + + cal.set(Calendar.YEAR, Integer.parseInt(dt.substring(0, 4))); + cal.set(Calendar.MONTH, Integer.parseInt(dt.substring(5, 7)) - 1); + cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dt.substring(8,10))); + chinaCal.setTimeInMillis(cal.getTimeInMillis()); + + int chinaYY = chinaCal.get(ChineseCalendar.EXTENDED_YEAR) - 2637 ; + int chinaMM = chinaCal.get(ChineseCalendar.MONTH) + 1; + int chinaDD = chinaCal.get(ChineseCalendar.DAY_OF_MONTH); + + String chinaDate = "" ; // 음력 날짜 + + if(chinaMM < 10) // 월 + chinaDate += "0" + Integer.toString(chinaMM) ; + else + chinaDate += Integer.toString(chinaMM) ; + + chinaDate += "-" ; // 날짜 구분자 + + if(chinaDD < 10) // 일 + chinaDate += "0" + Integer.toString(chinaDD) ; + else + chinaDate += Integer.toString(chinaDD) ; + + // 음력 공휴일 목록과 변환한 음력날짜가 일치하는지 비교 + for(int i=0; i < arrLunar.length; i++){ + String tmpLunar = arrLunar[i] ; + if(tmpLunar.equals(chinaDate)){ + result = true ; + } + } + return result ; + } + + /** + * 게시판 제목등 문자열 길이를 설정한 갯수에 맞게 잘라온다 + * @param str 문자열 + * @param len 짜를 갯수(영문,숫자는 1 한글등 유니코드는 2로 계산해서 보통 출력되는 갯수 *2 값으로 설정) + * @param trail 짜른뒤에 붙일 문자열 "..." + * @return + */ + public static String cutString(String str, int len, String trail) { + if (str==null) return ""; + String returnValue = str; + int slen = 0, blen = 0; + char c; + for(int i=0; i < str.length();i++){ + c = str.charAt(i); + if(c > 127) slen+=2; + else slen++; + if(slen > len){ + returnValue = str.substring(0, i) + trail; + break; + } + } + return returnValue; + } + + + /** + * 파일을 삭제. 복구 불가 + * @param filePathFullFileName 전체 풀 경로 + 파일명 + */ + public static void deleteFile(String filePathFullFileName ){ + String fullFileName = getFilePathReplace(filePathFullFileName); + File f = new File(fullFileName ); + if(f.exists()){ + f.delete(); + } + } + + + /** + * 입력된 값과 현재 시간의 차이를 이전인지 현재인지 지났는지 검사 + * 입력날짜기 기준(strDate - nowDate) + * @param strDate yyyy-MM-dd 형식으로 날짜만 + * @return 1: 전, 0:오늘날짜, -1:지난날짜 + */ + public static int dateDiff(String strDate){ + Calendar cal1 = Calendar.getInstance(); + Calendar cal2 = Calendar.getInstance(); +// java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.KOREA); + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd", Locale.KOREA); + + Date date1 = null; + try { + date1 = sdf.parse(strDate); + } catch (ParseException e) { + logger.error("예외 상황 발생"); + } + Date date2 = new Date(); + + cal1.setTime(date1); + cal2.setTime(date2); + + int diff = (int)((cal1.getTimeInMillis() - cal2.getTimeInMillis())/(long)(60*60*24*1000)); + if(diff > 0){ + return 1; + }else if(diff < 0){ + return -1; + }else{ + return 0; + } + } + /** + * 두 날짜의 차이를 설정한 type에 맞게 가져온다. 주의할것은 strDate1 - strDate2 이므로 양,음수를 잘 구분해야함 + * @param strDate1 첫번째 날짜 + * @param strDate2 두번째 날짜 + * @param pattern 날짜 패턴 두 날짜가 패턴과 일치해야함 (yyyy-MM-dd HH:mm:ss) 형식 + * @param type 리턴받는 두 날짜의 차이를 일(d), 시간(h), 분(m) 단위로 선택함 + * @return + */ + public static int dateDiff(String strDate1, String strDate2, String pattern, String type){ + Calendar cal1 = Calendar.getInstance(); + Calendar cal2 = Calendar.getInstance(); + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(pattern, Locale.KOREA); + + Date date1 = null; + Date date2 = null; + try { + date1 = sdf.parse(strDate1); + date2 = sdf.parse(strDate2); + } catch (ParseException e) { + logger.error("예외 상황 발생"); + } + + cal1.setTime(date1); + cal2.setTime(date2); + long divide = 0; + if("d".equals(type)){ + divide = 60*60*24*1000; + }else if("h".equals(type)){ + divide = 60*60*1000; + }else{ + divide = 60 * 1000; + } + return (int)((cal1.getTimeInMillis() - cal2.getTimeInMillis())/(divide)); + + } + /** + * 해당 날짜를 원하는 날수 만큼 증가, 감소 시킨다. + * @param strDate 기준 날짜, 날짜 형식으로 입력. + * @param intIncrease 증가 또는 감소 하고자 하는 수치 + * @return 변경된 날짜 문자열 + */ + public static String dateAdd(String strDate, int intIncrease){ + Calendar cal1 = Calendar.getInstance(); + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd", Locale.KOREA); + Date date1 = null; + try { + date1 = sdf.parse(strDate); + } catch (ParseException e) { + logger.error("예외 상황 발생"); + } + cal1.setTime(date1); + long addTimeStamp = ((long)(60*60*24*1000) * intIncrease); + cal1.setTimeInMillis(cal1.getTimeInMillis() + addTimeStamp); + + return sdf.format(new java.sql.Timestamp(cal1.getTimeInMillis())); + } + + /** + * HTML 형식의 메일을 발송한다. + * @param toEmail 받는사람 이메일주소 + * @param toName 받는사람 이름 , 없으면 "" + * @param fromEmail 보내는사람 이메일주소 + * @param fromName 보내는사람 이름 , 없으면 "" + * @param subject 이메일 제목 + * @param content 이메일 내용 HTML 형식 + * @throws IOException + */ + public static void sendMail(String toEmail, String toName, String fromEmail, String fromName, String subject, String content) throws IOException, EmailException{ + //이메일 형식이 아니면 그냥 리턴. + if(!regEx("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$",toEmail )) { + logger.error("이메일 발송오류 : " + toEmail); + return; + } + HtmlEmail email = new HtmlEmail(); + email.setCharset("UTF-8"); + email.setHostName("118.128.208.148"); //smtp메일서버 + email.setAuthentication("admin", "kdiakdia0!"); + email.addTo(toEmail, toName); + email.setFrom(fromEmail, fromName); + email.setSubject(subject); + + // set the html message + email.setHtmlMsg(content); + email.setTextMsg(content + "회원님의 메일은 HTML 형식을 지원하지 않습니다"); + email.send(); + } + + /** + * KISA SEED 256 암호화, str변수의 값을 암호화 하여 리턴한다. + * @param sPlainText, 암호화대상 문자열 + * @return 암호화된 문자열, null인경우 key 파일 로딩 오류임. + */ + public static String seedEnc256(String sPlainText){ + return KISASeed256.Encrypt(sPlainText); + } + + /** + * KISA SEED 256 복호화, str변수의 값을 복호화 하여 리턴한다. + * @param sCipherText, 복호화대상 암호문자열 + * @return 복호화된 문자열, null인경우 key 파일 로딩 오류임. + */ + public static String seedDec256(String sCipherText){ + return KISASeed256.Decrypt(sCipherText); + } + + /** + * KISA seed 용 key.dat 파일이 있는 경로 + * @return + */ + private static String getSeedKeyPath(){ + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String path = request.getSession().getServletContext().getRealPath("") + + System.getProperty("file.separator") + "WEB-INF" + + System.getProperty("file.separator") + "config" + + System.getProperty("file.separator") + "cms" + + System.getProperty("file.separator") + "key.dat"; + return path; + } + /** + * KISA SEED 암호화, str변수의 값을 암호화 하여 리턴한다. + * 암호화 길이 : 15byte단위로 32byte씩 증가 15byte => 32byte, 31byte까지는 64byte, 47byte 까지는 96byte... + * @param str + * @return 암호화된 문자열, null인경우 key 파일 로딩 오류임. + */ + public static String seedEnc(String sPlainText){ + KISA.SeedCBC s = new KISA.SeedCBC(); + + String retMsg = s.LoadConfig(getSeedKeyPath() ); + String returnValue = null; + if (retMsg.equals("OK") == false) { + logger.error(retMsg); + } else { + byte[] bCipherText = s.Encryption(sPlainText.getBytes()); + returnValue = s.toHexString(bCipherText); //no base64 + } + return returnValue; + } + + + /** + * KISA SEED 암호화, str변수의 값을 복호화 하여 리턴 + * @param str + * @return 복고화된 문자열, null인경우 key 파일 로딩 오류임. + */ + public static String seedDec(String sCipherText){ + KISA.SeedCBC s = new KISA.SeedCBC(); + String retMsg = s.LoadConfig(getSeedKeyPath() ); + + String returnValue = null; + if (retMsg.equals("OK") == false) { + logger.error(retMsg); + } else { + byte[] bPlainText = s.Decryption( s.toByteArray(sCipherText) ); //no base64 + returnValue = new String(bPlainText); + } + return returnValue; + } + + /** + * KISA SEED 암호화 + BASE64, str변수의 값을 암호화 하여 리턴한다. + * 암호화 길이 : 15byte단위로 32byte씩 증가 15byte => 32byte, 31byte까지는 64byte, 47byte 까지는 96byte... + * @param str + * @return 암호화된 문자열, null인경우 key 파일 로딩 오류임. + */ + public static String seedEncBase64(String sPlainText){ + KISA.SeedCBC s = new KISA.SeedCBC(); + String retMsg = s.LoadConfig(getSeedKeyPath() ); + String returnValue = null; + if (retMsg.equals("OK") == false) { + logger.error(retMsg); + } else { + sun.misc.BASE64Encoder Base64Encoder = new sun.misc.BASE64Encoder(); + byte[] bCipherText = s.Encryption(sPlainText.getBytes()); + returnValue = Base64Encoder.encode(bCipherText); //base64 + } + return returnValue; + } + + /** + * KISA SEED 암호화 + BASE64, str변수의 값을 복호화 하여 리턴 + * @param str + * @return 복고화된 문자열, null인경우 key 파일 로딩 오류임. + */ + public static String seedDecBase64(String sCipherText){ + // seed 암호화 jdk 1.6 이상 + KISA.SeedCBC s = new KISA.SeedCBC(); + String retMsg = s.LoadConfig(getSeedKeyPath() ); + + String returnValue = null; + if (retMsg.equals("OK") == false) { + logger.error(retMsg); + } else { + sun.misc.BASE64Decoder Base64Decoder = new sun.misc.BASE64Decoder(); + byte[] bCipherText; + try { + bCipherText = Base64Decoder.decodeBuffer( sCipherText ); + + byte[] bPlainText = s.Decryption( bCipherText ); //base64 + returnValue = new String(bPlainText); + + } catch (IOException e) { + logger.error("예외 상황 발생"); + } + } + return returnValue; + } + + + /** + * 파일 다운로드용 파일명 암호화, 암호화된 파일명은 urlencoding으로 변경 후 링크에 사용해야 한다. + * @param str + * @return + */ + public static String getFileEnc(String str){ + return seedEncBase64(getRandomString(8) + str); + } + + /** + * 파일 다운로드용 파일명 복호화 + * @param str + * @return + */ + public static String getFileDec(String str){ + String tmpStr = seedDecBase64(str); + if(tmpStr != null && tmpStr.length()> 8) tmpStr = tmpStr.substring(8); + return tmpStr; + } + /** + * GET 방식으로 변수를 넘길때 특수문자, 한글등을 변환해준다. + * @param str + * @return + */ + public static String URLEncoding(String str){ + try { + str = java.net.URLEncoder.encode(str,"UTF-8"); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + logger.error("예외 상황 발생"); + } + return str; + } + /** + * 입력받은 폴더와 파일명을 암호화 한다. + * @param folder + * @param filename + * @return + */ + public static String getDownloadLink(String fileIndex, String folder, String saveFilename, String originalFilename){ + String returnValue = ""; + try { + if(!"".equals(saveFilename) && !"".equals(folder)){ + returnValue = getFileEnc(fileIndex + "::" + folder + "::" + saveFilename + "::" + originalFilename); + returnValue = java.net.URLEncoder.encode(returnValue,"UTF-8"); + } + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + logger.error("예외 상황 발생"); + } + return returnValue; + } + + + /** + * 첨부된 파일의 썸네일 이미지를 생성한다. + * @param path + * @param filename + * @param tail + * @param width + * @param height + * @return + */ + public static String thumbnail(String path, String filename, String tail, int width, int height, boolean ratio){ + if("".equals(isNull(path,"")) || "".equals(isNull(filename,""))){ + return ""; + } + path = getFilePathReplace(path); + filename = getFilePathReplace(filename); + tail = getFilePathReplace(tail); + + File saveFolder = new File(path); + + if (!saveFolder.exists() || saveFolder.isFile()) { + saveFolder.setExecutable(false, true); + saveFolder.setReadable(true); + saveFolder.setWritable(true, true); + saveFolder.mkdirs(); + } + String fileExt = filename.substring(filename.lastIndexOf(".") + 1); + String toFilename = filename.substring(0, filename.lastIndexOf(".")) + tail + "." + fileExt; + try { + //원본파일, 사이즈, 저장파일 경로 + 파일명 + String fullFileName = getFilePathReplace(path + System.getProperty("file.separator") + filename); + java.awt.image.BufferedImage originalImage = javax.imageio.ImageIO.read(new File(fullFileName)); + java.awt.image.BufferedImage thumbnail = Thumbnails.of(originalImage) .size(width, height).imageType(BufferedImage.TYPE_INT_ARGB) .asBufferedImage(); + Thumbnails.of(thumbnail).size(width, height).keepAspectRatio(ratio).toFile(saveFolder.getAbsolutePath() + System.getProperty("file.separator") + toFilename); + + } catch (IOException e) { + logger.error("예외 상황 발생"); + } + return toFilename; + } + + + /** + * 썸네일 파일명 (기존 파일 이름 뒤에 지정된 문자를 추가하여 파일명을 새로 만든다) + * @param filename + * @param tail + * @return + */ + public static String getThumbFileName(String filename, String tail){ + String fileExt = filename.substring(filename.lastIndexOf(".") + 1); + if(!"".equals(fileExt)){ + return filename.substring(0, filename.lastIndexOf(".")) + tail + "." + fileExt; + }else{ + return ""; + } + + } + + /** + * 욕설 필터링 + * @param str + * @return + * @throws IOException + */ + public static String filtering(String str, HttpSession session ) throws IOException { + String filterTxt = ""; + java.io.FileInputStream fis = null; + java.io.InputStreamReader isr = null; + java.io.BufferedReader br = null; + try{ + String fullFileName = getFilePathReplace(session.getServletContext().getRealPath("/") + "WEB-INF\\filter.txt"); + fis = new java.io.FileInputStream(new java.io.File(fullFileName)); + isr = new java.io.InputStreamReader(fis,"UTF-8"); + br = new java.io.BufferedReader(isr); + filterTxt = br.readLine(); + }catch(IOException e){ + return str; + }finally{ + if(fis != null) fis.close(); + if(isr != null) isr.close(); + if(br != null) br.close(); + } + return regEx(filterTxt, str, "**"); + } + + /** + * 스트립트 실행을 위한 페이지를 생성 + * @param msg + * @param script + * @return + */ + public static String getAlertHtml(String msg, String script){ + StringBuilder sb = new StringBuilder(); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append("오류"); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + return sb.toString(); + } + + public static String getUserIP() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getRemoteHost(); + } + + public static String maskId(String id){ + String returnValue = ""; + if(!"".equals(id)){ + for(int i = 0; i < id.length(); i++){ + if( i < Math.round(id.length() /2) ){ + returnValue += id.charAt(i); + }else{ + returnValue += "*"; + } + } + } + return returnValue; + } + public static boolean saveFile(String filename, String contents) throws IOException{ + + String fullFilePath = getFilePathReplace(getContextRoot()+ filename); + java.io.FileWriter fileWriter = null; + java.io.BufferedWriter bufferedWriter = null; + try { + fileWriter = new java.io.FileWriter(fullFilePath); + bufferedWriter = new java.io.BufferedWriter(fileWriter); + bufferedWriter.write(contents); + //bufferedWriter.close(); + } catch (IOException e) { +// e.printStackTrace(); + logger.error("예외 상황 발생"); + return false; + } finally { + if(bufferedWriter != null) bufferedWriter.close(); + if(fileWriter != null) fileWriter.close(); + } + return true; + } + + public static StringBuffer readFile (String filePath) throws IOException { + StringBuffer sb = new StringBuffer(); + filePath = getFilePathReplace(getContextRoot()+ filePath); + + FileReader fr = null; + BufferedReader in = null; + + try { + fr = new FileReader(filePath); + in = new BufferedReader(fr); + + String s = null; + while ( (s = in.readLine()) != null ) { + sb.append(s+"\n"); // 파일을 라인단위로 읽어들인다. + s = null; + } + + } catch (IOException e) { + logger.error("예외 상황 발생"); + } finally { + if(fr != null) fr.close(); + if(in != null) in.close(); + } + + return sb; + } + + public static String encoding(String str, String newCharset){ + java.nio.channels.FileChannel channel = null; + java.io.FileInputStream in = null; + try{ + Charset charset = Charset.forName(newCharset); + java.nio.ByteBuffer buff = ByteBuffer.allocate(32); + str = getFilePathReplace(str); + in = new java.io.FileInputStream(str); + }catch(IOException e){ + logger.error("예외 상황 발생"); + }finally{ + if(channel != null) try{channel.close();} catch(IOException e){logger.error("예외 상황 발생");} + if(in != null) try{in.close();} catch(IOException e){logger.error("예외 상황 발생");} + } + return ""; + } + + public static String getImageSize(String folder, String filename, String wSize){ + BufferedImage readImage = null; + String returnValue = ""; + try { + String fullFileName = getFileRoot() + System.getProperty("file.separator") +folder + System.getProperty("file.separator") + filename; + fullFileName = getFilePathReplace(fullFileName); + readImage = javax.imageio.ImageIO.read(new File(fullFileName)); + int w = readImage.getWidth(); + int targetWidth = Integer.parseInt(wSize); + int setWidth = w; + + if(w > targetWidth){ + setWidth = targetWidth; + } + returnValue = "width: " + setWidth + "px"; + } catch (IOException e) { + readImage = null; + logger.error("예외 상황 발생"); + } + return returnValue; + } + + + /** + * 홈페이지 접속 로그 정보를 HashMap에 담아서 리턴한다. + * @param request + * @param accessType 홈페이지는 h, 모바일은 m + * @isLogin 로그인 로그 저장인지 여부 + * @return + */ + public static HashMap insertLog(HttpServletRequest request, String accessType, boolean isLogin){ + String agent = isNull(request.getHeader("user-agent"), ""); + String referer = isNull(request.getHeader("referer"),""); + String os = ""; + String browser = ""; + String ip = isNull(request.getRemoteAddr(),""); + //홈페이지에서 메인으로 이동시는 로그저장안하도록함 + if(!isLogin && referer.toLowerCase().indexOf(request.getHeader("HOST")) > 0 ){ //|| referer.toLowerCase().indexOf("localhost") > 0){ + return null; + } + + if("".equals(ip) || "218.38.0.132".equals(ip) || "127.0.0.1".equals(ip)){ + return null; + } + + if(!"".equals(agent)){ + String[] arrTmp = agent.split(";"); + if(arrTmp.length >= 3){ + if(arrTmp[1].indexOf("MSIE") > 0){ + os = arrTmp[2]; + browser = arrTmp[1]; + }else if(arrTmp[1].indexOf("U") > 0){ + os = arrTmp[2]; + browser = getBrowser(agent); + }else{ + os = arrTmp[0]; + browser = getBrowser(agent); + } + }else if(arrTmp.length >=2 ){ + os = arrTmp[0]; + browser = getBrowser(agent); + } + if(referer.indexOf("naver") >= 0) referer = "네이버"; + else if(referer.indexOf("daum") >= 0) referer = "다음"; + else if(referer.indexOf("nate") >= 0) referer = "네이트"; + else if(referer.indexOf("google") >= 0) referer = "구글"; + else if(referer.indexOf("yahoo") >= 0) referer = "야후"; + + } + HashMap hmParam = new HashMap(); + hmParam.put("L_IP", ip); + hmParam.put("L_AGENT", agent); + hmParam.put("L_REFERER", referer); + hmParam.put("L_OS", os); + hmParam.put("L_BROWSER", browser); + hmParam.put("L_ACCESSTYPE", accessType); + return hmParam; + } + + /** + * 브라우저 agent 에서 브라우저 종류를 알아 낸다. + * @param agent 브라우저 agent + * @return 브라우저 종류 + */ + public static String getBrowser(String agent){ + String browser = ""; + if(agent.toLowerCase().indexOf("chromeplus")> 0){ + browser = "ChromePlus"; + }else if(agent.toLowerCase().indexOf("chrome")> 0){ + browser = "Chrome"; + }else if(agent.toLowerCase().indexOf("safari")> 0){ + browser = "Safari"; + }if(agent.toLowerCase().indexOf("firefox")> 0){ + browser = "Firefox"; + } + return browser; + } + + /** + * XML 파일로부터 설정된 값을 가져온다. + * /WEB-INF/config/cms/config_*****.xml 경로에 xml파일이 저장된다. + * @param type + * @return + * @throws IOException + */ + public static List getConfigFromXml(String type) throws IOException { + List list = new ArrayList(); + try{ + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String path = request.getSession().getServletContext().getRealPath("") + + System.getProperty("file.separator") + "WEB-INF" + + System.getProperty("file.separator") + "config" + + System.getProperty("file.separator") + "cms" + + System.getProperty("file.separator") + "config_" + type + ".xml"; + + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder parser = factory.newDocumentBuilder(); + Document dc = parser.parse(path); + + Element ele = dc.getDocumentElement(); + + NodeList nodeList = dc.getElementsByTagName("item"); + for(int i = 0; i < nodeList.getLength(); i++){ + HashMap hm = new HashMap(); + for(Node node = nodeList.item(i).getFirstChild(); node != null; node = node.getNextSibling()){ + if(Node.TEXT_NODE != node.getNodeType()){ + hm.put(node.getNodeName(), node.getTextContent()); + } + } + //p(hm); + list.add(hm); + } + }catch(IOException e){ + logger.error("예외 상황 발생"); + }catch(ParserConfigurationException e){ + logger.error("예외 상황 발생"); + }catch(SAXException e){ + logger.error("예외 상황 발생"); + } + return list; + } + + public static HashMap getConfigFromXml(String type, String strType) throws IOException { + List list = getConfigFromXml(type); + HashMap hm = new HashMap(); + for(int i = 0; i < list.size(); i++){ + HashMap tmp = list.get(i); + if(strType.equals(tmp.get("code"))){ + hm = tmp; + //p(hm); + break; + } + } + return hm; + } + + + public static boolean isEmail(String email){ + if("".equals(isNull(email, ""))) return false; + return regEx("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$", email); + } + + /** + * jsp 파일을 생성해 준다 + * @param path 물리적인 경로 + * @param filename 생성 할 파일명 + * @param contents 파일 내용 + * @throws IOException + */ + public static void createJspFile(String path, String filename, String contents) throws IOException { + // 디렉토리 생성 + path = getFilePathReplace(path); + File tmpFile = new File(path); + if(!tmpFile.exists()){ + tmpFile.setExecutable(false, true); + tmpFile.setReadable(true); + tmpFile.setWritable(true, true); + tmpFile.mkdir(); + } + contents = "<%@ page contentType=\"text/html; charset=UTF-8\" pageEncoding=\"UTF-8\"%>\n" + contents; + + String fullFileName = getFilePathReplace(path + filename); + File f = new File(fullFileName); + FileUtils.writeStringToFile(f, contents, "UTF-8"); + } + + /** + * 파일로 저장된 자바 객체를 읽어 옴. (객체는 implements Serializable 되어야 함) + * @param request + * @param filename 객체 명 + * @return Object obj + */ + public static Object getFileObject(HttpServletRequest request, String filename){ + String path = request.getSession().getServletContext().getRealPath(""); + path += System.getProperty("file.separator") + "WEB-INF"; + path += System.getProperty("file.separator") + "FILE_DB"; + path += System.getProperty("file.separator") + filename; + path += System.getProperty("file.separator") + "filedb_"+filename+".dat"; + + // 파일 있는지 확인. 없으면 빈 object return + path = getFilePathReplace(path); + File file = new File(path); + if(!file.exists()){ + return new Object(); + } + + java.io.FileInputStream fis = null; + java.io.ObjectInputStream ois =null; + Object obj = new Object(); + + try { + fis =new java.io.FileInputStream(path); + ois = new java.io.ObjectInputStream(fis); + obj = ois.readObject(); + } catch (IOException e) { + logger.error("예외 상황 발생"); + } catch (ClassNotFoundException e) { + logger.error("예외 상황 발생"); + }finally{ + try { + fis.close(); + } catch (IOException e) { + logger.error("예외 상황 발생"); + } + } + return obj; + } + + /** + * 자바 객체를 파일로 저장 함. + * @param request + * @param obj 저장할 객체 + * @param filename 객체 명 + * @return 0 저장중 오류, 1 저장 완료 + */ + public static String setFileObject(HttpServletRequest request, Object obj, String filename){ + String path = request.getSession().getServletContext().getRealPath(""); + path += System.getProperty("file.separator") + "WEB-INF"; + path += System.getProperty("file.separator") + "FILE_DB"; + path += System.getProperty("file.separator") + filename; + path = getFilePathReplace(path); + File saveFolder = new File(path); + if (!saveFolder.exists() || saveFolder.isFile()) { + saveFolder.setExecutable(false, true); + saveFolder.setReadable(true); + saveFolder.setWritable(true, true); + saveFolder.mkdirs(); + } + + path += System.getProperty("file.separator") + "filedb_" + filename + ".dat"; + java.io.FileOutputStream fos = null; + java.io.ObjectOutputStream oos = null; + try { + fos= new java.io.FileOutputStream(path); + oos= new java.io.ObjectOutputStream(fos); + oos.writeObject(obj); + } catch (IOException e) { + logger.error("예외 상황 발생"); + return "0"; + }finally{ + try{ + oos.close(); + }catch(IOException e){logger.error("예외 상황 발생");} + } + return "1"; + } + public static boolean setSiteFile(String contents) throws IOException{ + String path = ""; + path += System.getProperty("file.separator") + "WEB-INF"; + path += System.getProperty("file.separator") + "FILE_DB"; + path += System.getProperty("file.separator") + "site"; + path = getFilePathReplace(path); + File saveFolder = new File(path); + if (!saveFolder.exists() || saveFolder.isFile()) { + saveFolder.setExecutable(false, true); + saveFolder.setReadable(true); + saveFolder.setWritable(true, true); + saveFolder.mkdirs(); + } + + path += System.getProperty("file.separator") + "site"; + return saveFile(path, contents); + } + public static String getSiteFile(){ + String path = ""; + path += System.getProperty("file.separator") + "WEB-INF"; + path += System.getProperty("file.separator") + "FILE_DB"; + path += System.getProperty("file.separator") + "site"; + path += System.getProperty("file.separator") + "site"; + String contents = ""; + try { + contents = readFile(path).toString(); + } catch (IOException e) { + logger.error("예외 상황 발생"); + } + return contents; + } + + public static SystemconfigVO getSystemconfigVO(HttpServletRequest request, String fileName){ + Object obj = CommUtil.getFileObject(request, fileName); + SystemconfigVO systemconfigVO = new SystemconfigVO(); + + if(obj != null){ // 파일이 없는 경우. 빈 Object로 리턴된다. + if(obj instanceof SystemconfigVO) + systemconfigVO = (SystemconfigVO)obj; + } + return systemconfigVO; + } + +/* public static HashMap getSystemLicenseVO(HttpServletRequest request, String fileName){ + Object obj = CommUtil.getFileLicense(request, fileName); + HashMap systemLicenseVO = new HashMap(); + + if(obj != null){ // 파일이 없는 경우. 빈 Object로 리턴된다. + if(obj instanceof HashMap) + systemLicenseVO = (HashMap)obj; + } + return systemLicenseVO; + }*/ + + public static ItgMap getSystemLicenseVO(HttpServletRequest request, String fileName) throws IOException{ + Object obj = CommUtil.getFileLicense(request, fileName); + ItgMap systemLicenseVO = new ItgMap(); + + if(obj != null){ // 파일이 없는 경우. 빈 Object로 리턴된다. + if(obj instanceof ItgMap) + systemLicenseVO = (ItgMap)obj; + } + return systemLicenseVO; + } + + /** + * 파일의 내용을 암호화 하여 저장 함. + * @param source 암호화할 원본파일 위치+파일명 + * @param target 암호화후 저장될 위치+파일명 + * @return false 저장중 오류, true 저장 완료 + */ + public static boolean fileEnc(String source,String target){ + + boolean result = false; + if (source != null && source.length() > 0 + && target != null && target.length() > 0) { + try { + result = EgovFileScrty.encryptFile(source, target); + } catch (IOException e) { + // TODO Auto-generated catch block + logger.error("예외 상황 발생"); + } + } + + return result; + } + + /** + * 파일의 내용을 복호화 하여 저장 함. + * @param source 복호화할 원본파일 위치+파일명 + * @param target 복호화후 저장될 위치+파일명 + * @return false 저장중 오류, true 저장 완료 + */ + public static boolean fileDec(String source,String target){ + + boolean result = false; + if (source != null && source.length() > 0 + && target != null && target.length() > 0) { + try { + result = EgovFileScrty.decryptFile(source, target); + } catch (IOException e) { + // TODO Auto-generated catch block + logger.error("예외 상황 발생"); + } + } + + return result; + } + + /** + * 파일로 저장된 라이센스 파일을 읽어 옴. + * @param request + * @param filename 객체 명 + * @return Object obj + */ + public static Object getFileLicense(HttpServletRequest request, String filename) throws IOException{ + String path = request.getSession().getServletContext().getRealPath(""); + path += System.getProperty("file.separator") + "WEB-INF"; + path += System.getProperty("file.separator") + filename; + String file1 = path + System.getProperty("file.separator") + filename+".license"; + String file2 = path + System.getProperty("file.separator") + "temp.license"; + // 파일 있는지 확인. 없으면 빈 object return + file1 = getFilePathReplace(file1); + File file = new File(file1); + if(!file.exists()){ + return new Object(); + } + + java.io.FileInputStream fis = null; + java.io.ObjectInputStream ois =null; + Object obj = new Object(); + + try { + + fileDec(file1,file2); + file2 = getFilePathReplace(file2); + fis =new java.io.FileInputStream(file2); + ois = new java.io.ObjectInputStream(fis); + obj = ois.readObject(); + } catch (IOException e) { + logger.error("예외 상황 발생"); + } catch (ClassNotFoundException e) { + logger.error("예외 상황 발생"); + }finally{ + try { + fis.close(); + fileDel(file2); + } catch (IOException e) { + logger.error("예외 상황 발생"); + } + } + return obj; + } + + public static String getUserNavigation(String str, String startStr){ + String returnValue = ""; + + if(!"".equals(isNull(str, ""))){ + String[] arrStr = str.split(">"); + int startInt = 0; + if(!"".equals(startStr)) startInt=Integer.parseInt(startStr); + for(int i =0;i < arrStr.length; i++){ + if(i > startInt){ + if (i <= 5) { + returnValue += " >"; + if(i == arrStr.length - 1){ + returnValue += " " + arrStr[i] + ""; + }else{ + returnValue += " " + arrStr[i]; + } + } + } + } + } + return returnValue; + } + + public static String getUserFullNavigation(String str, String startStr, String currentMenuName){ + String returnValue = ""; + str += ">"+currentMenuName; + if(!"".equals(isNull(str, ""))){ + String[] arrStr = str.split(">"); + int startInt = 0; + if(!"".equals(startStr)) startInt=Integer.parseInt(startStr); + for(int i =0;i < arrStr.length; i++){ + if(i > startInt){ + if (i < 5) { + returnValue += " >"; + if(i == arrStr.length - 1 || i == 4){ + returnValue += " " + arrStr[i] + ""; + }else{ + returnValue += " " + arrStr[i]; + } + } + } + } + } + return returnValue; + } + + /** + * String문자열을 자르고자 하는 문자(str)을 입력 후 얻어오고자 하는 위치(position)의 문자를 가져옴. + * @param str Split기준이 되는 문자 + * @param position 자르고 난 후 가져올 문자의 위치 + * @return returnValue + */ + public static String strSplitGet(String str, String position){ + String returnValue = ""; + if(!"".equals(isNull(str, ""))){ + String[] arrStr = str.split(">"); + returnValue = arrStr[Integer.parseInt(position)]; + } + return returnValue; + } + + /** + * 전화번호 구분 (-,~) + * String문자열을 자르고자 하는 문자(str)을 입력 후 얻어오고자 하는 위치(position)의 문자를 가져옴. + * @param str Split기준이 되는 문자 + * @param position 자르고 난 후 가져올 문자의 위치 + * @return returnValue + */ + public static String strSplitGetPhone(String str, String position){ + String returnValue = ""; + if(!"".equals(isNull(str, ""))){ + String[] arrStr = str.split("-|~"); + returnValue = arrStr[Integer.parseInt(position)]; + + } + return returnValue; + } + + public static String getAntiHtml(String contents, String type){ + if("".equals(isNull(contents, ""))) return ""; + String result = contents; + result = result.replaceAll("\"", """); + result = result.replaceAll("\\r", " "); + result = result.replaceAll(" ", " "); + result = result.replaceAll("\\n", " "); + result = result.replaceAll("'", "'"); + result = result.replaceAll("<[^>]+>", " "); + return result; + } + + + public static String stripXss(String contents){ + if("".equals(isNull(contents, ""))) return ""; + String result = contents; + result = result.replaceAll("\0", "");//널문자 + + result = result.replaceAll("<", "<"); + result = result.replaceAll(">", ">"); + + result = result.replaceAll("\\(", "("); + result = result.replaceAll("\\)", ")"); + + result = result.replaceAll("\"", """); + result = result.replaceAll("'", "'"); + + + result = result.replaceAll(" ", " ");//공백은 되게 함 + result = result.replaceAll("\\n", "
    ");//줄바꿈은 되게 함 + return result; + } + + + public static String stripXssScript(String contents){ + if("".equals(isNull(contents, ""))) return ""; + //String result = contents; + String result = getRemoveScript(contents); + + result = result.replaceAll("<", "<"); + result = result.replaceAll(">", ">"); + + result = result.replaceAll("\\(", "("); + result = result.replaceAll("\\)", ")"); + + result = result.replaceAll("\"", """); + result = result.replaceAll("'", "'"); + + return result; + } + + public static String getRemoveScript(String strContent){ + + strContent = strContent.replaceAll("", ""); + strContent = strContent.replaceAll("onclick=[\"']?([^>\"']+)[\"']*", ""); + strContent = strContent.replaceAll("onmouseover=[\"']?([^>\"']+)[\"']*", ""); + strContent = strContent.replaceAll("onmouseout=[\"']?([^>\"']+)[\"']*", ""); + strContent = strContent.replaceAll("onkeydown=[\"']?([^>\"']+)[\"']*", ""); + strContent = strContent.replaceAll("onkeyup=[\"']?([^>\"']+)[\"']*", ""); + strContent = strContent.replaceAll("onblur=[\"']?([^>\"']+)[\"']*", ""); + strContent = strContent.replaceAll("onchange=[\"']?([^>\"']+)[\"']*", ""); + + return strContent; + } + + public static String decodeXss(String contents){ + if("".equals(isNull(contents, ""))) return ""; + String result = contents; + + result = result.replaceAll("<","<"); + result = result.replaceAll(">",">"); + + result = result.replaceAll("(","\\("); + result = result.replaceAll(")","\\)"); + + result = result.replaceAll(""","\""); + result = result.replaceAll("'","'"); + + result = result.replaceAll(" "," ");//공백은 되게 함 + + return result; + } + + + public static String decodeHTMLTagFilter(String contents){ + if("".equals(isNull(contents, ""))) return ""; + String result = contents; + + result = result.replaceAll("<","<"); + result = result.replaceAll(">",">"); + result = result.replaceAll("&","&"); + result = result.replaceAll(""","\""); + result = result.replaceAll("'","'"); + + return result; + } + + /** + * 원본 문자열에서 검색 문자열의 존재 여부를 알아낸다.(대소문자무시) + * @param originString 원본문자열 , + * @param str 검색문자열 + * @return 해당 운영체제가 맞는지 여부 + */ + public static boolean isContainStr(String str,String originString){ + + return originString.toLowerCase().indexOf(str.toLowerCase()) != -1; + } + + /** + * 홈페이지 접속정보 + * @param request + * @param isLogin 로그인 여부 + * @return mngrStatsVO + * @throws org.json.simple.parser.ParseException + */ +// public static MngrStatsVO getLogInfo(HttpServletRequest request,boolean isLogin) throws org.json.simple.parser.ParseException{ +// +// String agent = isNull(request.getHeader("user-agent"), ""); +// String referer = isNull(request.getHeader("referer"),""); +// String language = isNull(request.getHeader("accept-language"),""); +// String keyword = (String) getKeyWord(referer).get("keyWord"); +// String searchEngine = (String) getKeyWord(referer).get("company"); +// String ip = getClientIP(request); +// +// String os = ""; +// String browser = ""; +// String deviceKind = ""; +// +// //홈페이지에서 메인으로 이동시는 로그저장안하도록함 +// if(!isLogin && referer.toLowerCase().indexOf(request.getHeader("HOST")) > 0 ){ //|| referer.toLowerCase().indexOf("localhost") > 0){ +// String host = "http://"+request.getHeader("HOST")+"/"; +// if(referer.toLowerCase().equals(host)){//최초 인덱스 페이지로부터 자동이동한 경우 +// }else{ +// return null; +// } +// } +// +// if("".equals(ip) || "218.38.0.132".equals(ip) /*|| "127.0.0.1".equals(ip)*/){ +// return null; +// } +// +// if(!"".equals(agent)){ +// browser = getBrowserSE(agent); +// os = getOs(agent); +// deviceKind = "PC"; +// if(!"".equals(getMobileDevice(agent))){ +// deviceKind = getMobileDevice(agent); +// } +// } +// +// MngrStatsVO mngrStatsVO = new MngrStatsVO(); +// +// mngrStatsVO.setClAgent(agent); +// mngrStatsVO.setClOs(os); +// mngrStatsVO.setClDeviceKind(deviceKind); +// mngrStatsVO.setClBrowser(browser); +// mngrStatsVO.setClSearchEngine(searchEngine); +// mngrStatsVO.setClKeyword(keyword); +// mngrStatsVO.setClReferer(referer); +// mngrStatsVO.setClIp(ip); +// mngrStatsVO.setClLanguage(language); +// +// return mngrStatsVO; +// } + + + /** + * agent 에서 운영체제를 알아낸다. + * @param 사용자 agent + * @return os 운영체제종류 + */ + public static String getOs(String agent){ + String OSName = ""; + String OsVers=""; + String AgentUserOs = agent.replace(" ", ""); + if(isContainStr("win",agent)){ + if(AgentUserOs.indexOf("WindowsCE") != -1) OSName="Windows CE"; + else if(AgentUserOs.indexOf("Windows95") != -1) OSName="Windows 95"; + else if(AgentUserOs.indexOf("Windows98") != -1) { + if (AgentUserOs.indexOf("Win9x4.90") != -1){OSName="Windows Me"; } else {OSName="Windows 98";} + } + else if(AgentUserOs.indexOf("Win98") != -1) OSName="Windows Windows 98"; + else if(AgentUserOs.indexOf("WindowsNT4.0") != -1) OSName="Windows NT 4.0"; + else if(AgentUserOs.indexOf("WinNT") != -1) OSName="Windows NT 4.0"; + else if(AgentUserOs.indexOf("WindowsNT5.0") != -1) OSName="Windows 2000"; + else if(AgentUserOs.indexOf("WindowsNT5.01") != -1) OSName="Windows 2000, Service Pack 1 (SP1)"; + else if(AgentUserOs.indexOf("WindowsNT5.1") != -1) OSName="Windows XP"; + else if(AgentUserOs.indexOf("WindowsNT5.2") != -1) OSName="Windows Server 2003"; + else if(AgentUserOs.indexOf("WindowsNT6.0") != -1) OSName="Windows Vista/Server 2008"; + else if(AgentUserOs.indexOf("WindowsNT7") != -1) OSName="Windows 7"; + else if(AgentUserOs.indexOf("WindowsNT8") != -1) OSName="Windows 8"; + else if(AgentUserOs.indexOf("WindowsNT8.1") != -1) OSName="Windows 8.1"; + else if(AgentUserOs.indexOf("WindowsNT10") != -1) OSName="Windows 10"; + else if(AgentUserOs.indexOf("WindowsPhoneOS7.5") != -1) OSName="Windows Phone OS 7.5"; + else if(AgentUserOs.indexOf("WindowsPhone8.1") != -1) OSName="Windows Phone 8.1"; + else if(AgentUserOs.indexOf("WindowsPhone8") != -1) OSName="Windows Phone 8"; + else if(AgentUserOs.indexOf("WindowsPhone10") != -1) OSName="Windows 10 Mobile"; + else if(AgentUserOs.indexOf("XboxOne") != -1) OSName="Xbox One"; + else if(AgentUserOs.indexOf("Xbox") != -1) OSName="Xbox 360"; + else if(AgentUserOs.indexOf("Win16") != -1) OSName="Windows 3.x"; + else if(AgentUserOs.indexOf("ARM") != -1) OSName="Windows RT"; + else OSName="Windows (Unknown)"; + + if(AgentUserOs.indexOf("WOW64") != -1) OsVers=", Win64 on x64"; + else if(AgentUserOs.indexOf("Win64;x64") != -1) OsVers=", Win64 on x64"; + else if(AgentUserOs.indexOf("Win16") != -1) OsVers=" 16-bit"; + else OsVers=" on x86"; + + }else if(isContainStr("linux",agent)){ + if(AgentUserOs.indexOf("Android") != -1) { OSName = getAndroidDevName(agent); } + else if(AgentUserOs.indexOf("BlackBerry9000") != -1) OSName="BlackBerry9000"; + else if(AgentUserOs.indexOf("BlackBerry9300") != -1) OSName="BlackBerry9300"; + else if(AgentUserOs.indexOf("BlackBerry9700") != -1) OSName="BlackBerry9700"; + else if(AgentUserOs.indexOf("BlackBerry9780") != -1) OSName="BlackBerry9780"; + else if(AgentUserOs.indexOf("BlackBerry9900") != -1) OSName="BlackBerry9900"; + else if(AgentUserOs.indexOf("BlackBerry;Opera Mini") != -1) OSName="Opera/9.80"; + else if(AgentUserOs.indexOf("Symbian/3") != -1) OSName="Symbian OS3"; + else if(AgentUserOs.indexOf("SymbianOS/6") != -1) OSName="Symbian OS6"; + else if(AgentUserOs.indexOf("SymbianOS/9") != -1) OSName="Symbian OS9"; + else if(AgentUserOs.indexOf("Ubuntu") != -1) OSName="Ubuntu"; + else if(AgentUserOs.indexOf("PDA") != -1) OSName="PDA"; + else if(AgentUserOs.indexOf("NintendoWii") != -1) OSName="Nintendo Wii"; + else if(AgentUserOs.indexOf("PSP") != -1) OSName="PlayStation Portable"; + else if(AgentUserOs.indexOf("PS2;") != -1) OSName="PlayStation 2"; + else if(AgentUserOs.indexOf("PLAYSTATION3") != -1) OSName="PlayStation 3"; + else OSName="Linux (Unknown)"; + + if(AgentUserOs.indexOf("x86_64") != -1) OsVers=", x86_64"; + else if(AgentUserOs.indexOf("i686") != -1) OsVers=", i686"; + else if(AgentUserOs.indexOf("i686 on x86_64") != -1) OsVers=", i686 running on x86_64"; + else if(AgentUserOs.indexOf("armv7l") != -1) OsVers=" Nokia N900 Linux mobile, on the Fennec browser"; + else if(AgentUserOs.indexOf("IA-32") != -1) OsVers=" 32-bit"; + else OsVers=""; + + }else if(isContainStr("x11",agent)){ + + OSName="UNIX"; + + }else if(isContainStr("mac",agent)){ + if(AgentUserOs.indexOf("iPhoneOS3") != -1) OSName="iPhone OS 3"; + else if(AgentUserOs.indexOf("iPhoneOS4") != -1) OSName="iPhone OS 4"; + else if(AgentUserOs.indexOf("iPhoneOS5") != -1) OSName="iPhone OS 5"; + else if(AgentUserOs.indexOf("iPhoneOS6") != -1) OSName="iPhone OS 6"; + else if(AgentUserOs.indexOf("iPhoneOS7") != -1) OSName="iPhone OS 7"; + else if(AgentUserOs.indexOf("iPhoneOS8") != -1) OSName="iPhone OS 8"; + else if(AgentUserOs.indexOf("iPhoneOS9") != -1) OSName="iPhone OS 9"; + else if(AgentUserOs.indexOf("iPad") != -1) OSName="iPad"; + else if((AgentUserOs.indexOf("MacOSX10_1")|AgentUserOs.indexOf("MacOSX10.1")) != -1) OSName="Mac OS X Puma"; + else if((AgentUserOs.indexOf("MacOSX10_2")|AgentUserOs.indexOf("MacOSX10.2")) != -1) OSName="Mac OS X Jaguar"; + else if((AgentUserOs.indexOf("MacOSX10_3")|AgentUserOs.indexOf("MacOSX10.3")) != -1) OSName="Mac OS X Panther"; + else if((AgentUserOs.indexOf("MacOSX10_4")|AgentUserOs.indexOf("MacOSX10.4")) != -1) OSName="Mac OS X Tiger"; + else if((AgentUserOs.indexOf("MacOSX10_5")|AgentUserOs.indexOf("MacOSX10.5")) != -1) OSName="Mac OS X Leopard"; + else if((AgentUserOs.indexOf("MacOSX10_6")|AgentUserOs.indexOf("MacOSX10.6")) != -1) OSName="Mac OS X Snow Leopard"; + else if((AgentUserOs.indexOf("MacOSX10_7")|AgentUserOs.indexOf("MacOSX10.7")) != -1) OSName="Mac OS X Lion"; + else if((AgentUserOs.indexOf("MacOSX10_8")|AgentUserOs.indexOf("MacOSX10.8")) != -1) OSName="Mac OS X Mountain Lion"; + else if((AgentUserOs.indexOf("MacOSX10_9")|AgentUserOs.indexOf("MacOSX10.9")) != -1) OSName="Mac OS X Mavericks"; + else if((AgentUserOs.indexOf("MacOSX10_10")|AgentUserOs.indexOf("MacOSX10.10")) != -1) OSName="Mac OS X Yosemite"; + else OSName="MacOS (Unknown)"; + + if(AgentUserOs.indexOf("Intel") != -1) OsVers=" on Intel x86 or x86_64"; + else if(AgentUserOs.indexOf("PPC") != -1) OsVers=" on PowerPC"; + else OsVers=""; + }else{ + if(AgentUserOs.indexOf("OpenBSD") != -1) OSName="Open BSD"; + else if(AgentUserOs.indexOf("SunOS") != -1) OSName="Sun OS"; + else if(AgentUserOs.indexOf("QNX") != -1) OSName="QNX"; + else if(AgentUserOs.indexOf("BeOS") != -1) OSName="BeOS"; + else if(AgentUserOs.indexOf("OS/2") != -1) OSName="OS/2"; + else if(AgentUserOs.indexOf("iPhoneOS8") != -1) OSName="iPhone OS 8"; + else if(AgentUserOs.indexOf("nuhk") != -1) OSName="Search Bot(nuhk)"; + else if(AgentUserOs.indexOf("bingbot") != -1) OSName="Search Bot(Bing)"; + else if(AgentUserOs.indexOf("Googlebot") != -1) OSName="Search Bot(Google)"; + else if(AgentUserOs.indexOf("Yammybot") != -1) OSName="Search Bot(Yammy)"; + else if(AgentUserOs.indexOf("Openbot") != -1) OSName="Search Bot(Open)"; + else if(AgentUserOs.indexOf("Slurp") != -1) OSName="Search Bot(Slurp)"; + else if(AgentUserOs.indexOf("MSNBot") != -1) OSName="Search Bot(MSN)"; + else if(AgentUserOs.indexOf("Ask Jeeves/Teoma") != -1) OSName="Search Bot(Teoma)"; + else if(AgentUserOs.indexOf("ia_archiver") != -1) OSName="Search Bot(Ia)"; + + else OSName="Unknown OS"; + } + + return OSName + OsVers; + } + + public static String getMobileDevice(String userAgent){ + + String AgentUserM = userAgent.replace(" ", ""); + String ua=userAgent.toLowerCase(); + String mobileName = ""; + + boolean ismobile = ua.matches(".*(android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino).*")||ua.substring(0,4).matches("1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|e\\-|e\\/|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\\-|2|g)|yas\\-|your|zeto|zte\\-"); + if(ismobile){ + if(AgentUserM.indexOf("Android") != -1) mobileName = "Android"; + else if(AgentUserM.indexOf("iPhone") != -1) mobileName = "iPhone"; + else if(AgentUserM.indexOf("iPad") != -1) mobileName="iPad"; + else if(AgentUserM.indexOf("Windows") != -1) mobileName="Windows Phone"; + else{mobileName = "Etc Mobile";} + } + return mobileName; + } + + public static boolean isMobile(HttpServletRequest request){ + + String userAgent = request.getHeader("user-agent"); + String ua=userAgent.toLowerCase(); + + boolean ismobile1 = ua.matches(".*(android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino).*")||ua.substring(0,4).matches("1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|e\\-|e\\/|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\\-|2|g)|yas\\-|your|zeto|zte\\-"); + boolean ismobile2 = ua.matches(".*(lg|samsung).*"); + + if(ismobile1 || ismobile2){ + return true; + } + return false; + } + + /** + * agent 에서 안드로이드단말기 정보를 알아낸다. + * @param 사용자 agent + * @return 안드로이드 단말기정보(운영체제버전, 장치명) + */ + public static String getAndroidDevName(String agent) { + + //String regex = "/Android (.*);.*;\s*(.*)\sBuild/"; + Pattern p = Pattern.compile("Android (.*);.*;\\s*(.*)\\sBuild/"); + Matcher m = p.matcher(agent); + + String ver = ""; + String dev_name =""; + + int cnt=0; + + while(m.find()){ + cnt++; + ver = m.group(1); + dev_name = m.group(2); + } + if(cnt==0){ + p = Pattern.compile("Android (.*);\\s*(.*)\\sBuild/"); + m = p.matcher(agent); + while(m.find()){ + cnt++; + ver = m.group(1); + dev_name = m.group(2); + } + } + //return "Android " + ver + "," + dev_name; //운영체제 종류가 너무 다양해 짐 + return "Android " + ver; + } + + /** + * 브라우저 agent 에서 브라우저 종류를 알아 낸다. + * @param agent 브라우저 agent + * @return 브라우저 종류 + */ + public static String getBrowserSE(String agent){ + + String browser = ""; + + String[] arrTmp = agent.split(";"); + if(arrTmp.length >= 3){ + if(arrTmp[1].indexOf("MSIE") > 0){ + browser = arrTmp[1].replace("MS", ""); + }else if( arrTmp[1].indexOf("WOW64") > 0){ //IE11 체크 + browser = getIEBrowser(agent); //getExBrowser(arrTmp[1].trim()); + }else if(arrTmp[1].indexOf("U") > 0){ + browser = getExBrowser(agent); + }else{ + browser = getExBrowser(agent); + if("Safari".equals(browser)){ + if(!"".equals(getIEBrowser(agent))){ + browser = getIEBrowser(agent); + } + } + } + }else if(arrTmp.length >=2 ){ + browser = getExBrowser(agent); + } + return browser; + } + //getBrowserSE() 종속 + public static String getExBrowser(String agent){ + String browser = ""; + if(agent.toLowerCase().indexOf("edge")> 0){ + browser = "MS Edge"; + }else if(agent.toLowerCase().indexOf("opr")> 0){ + browser = "Opera"; + }else if(agent.toLowerCase().indexOf("chromeplus")> 0){ + browser = "ChromePlus"; + }else if(agent.toLowerCase().indexOf("chrome")> 0){ + browser = "Chrome"; + }else if(agent.toLowerCase().indexOf("safari")> 0){ + browser = "Safari"; + }else if(agent.toLowerCase().indexOf("firefox")> 0){ + browser = "Firefox"; + }/*else if(agent.toLowerCase().indexOf("msie")> 0 || agent.toLowerCase().indexOf("wow64")> 0){ //2016.09.24 IE 경우 IE 브라우저로 표기 형철 + browser = "IE"; + }*/else{ + browser = "Unknown Browser"; + } + return browser; + } + + //getBrowserSE() 종속 + public static String getIEBrowser(String agent){ + //String regex = "/Android (.*);.*;\s*(.*)\sBuild/"; + + Pattern p1 = Pattern.compile(";\\s*rv:(.*);.*;"); + Pattern p2 = Pattern.compile(";\\s*rv:(.*)\\)"); + Matcher m = p1.matcher(agent); + + String ver = ""; + int cnt=0; + + while(m.find()){ + cnt++; + ver = m.group(1); + } + if(cnt==0){ + m = p2.matcher(agent); + while(m.find()){ + cnt++; + ver = m.group(1); + } + } + + if((cnt==0)){ + return "IE"; + }else{ + return "IE " + ver; + } + } + + /** + * 브라우저 referer 에서 검색엔진에 사용된 "키워드"를 알아 낸다. + * @param 브라우저 referer + * @return 검색시 사용된 키워드 + * @throws org.json.simple.parser.ParseException + */ + public static HashMap getKeyWord(String referer) throws org.json.simple.parser.ParseException{ + + /*String Referer = request.getHeader("referer");*/ + String Referer = referer; + HashMap result= new HashMap(); + String domain = ""; + String company = ""; + String originKeyWord = ""; + + List refererArr = new ArrayList(); + ItgMap param = new ItgMap(); + try{ + String str = "["; + str = str+"{\"company\":\"다음\", \"domain\":\"daum.net\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Eniro\", \"domain\":\"eniro.se\", \"key\":\"search_word\"},"; + str = str+"{\"company\":\"네이버\", \"domain\":\"naver.com\", \"key\":\"query\"},"; + str = str+"{\"company\":\"Google\", \"domain\":\"google.com\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Google\", \"domain\":\"google.co.\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Yahoo\", \"domain\":\"yahoo.com\", \"key\":\"p\"},"; + str = str+"{\"company\":\"MSN\", \"domain\":\"msn.com\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Bing\", \"domain\":\"bing.com\", \"key\":\"q\"},"; + str = str+"{\"company\":\"AOL\", \"domain\":\"aol.com\", \"key\":\"query\"},"; + str = str+"{\"company\":\"AOL\", \"domain\":\"aol.com\", \"key\":\"encquery\"},"; + str = str+"{\"company\":\"Lycos\", \"domain\":\"lycos.com\", \"key\":\"query\"},"; + str = str+"{\"company\":\"Ask\", \"domain\":\"ask.com\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Altavista\", \"domain\":\"altavista.com\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Netscape\", \"domain\":\"search.netscape.com\", \"key\":\"query\"},"; + str = str+"{\"company\":\"CNN\", \"domain\":\"cnn.com/SEARCH\", \"key\":\"query\"},"; + str = str+"{\"company\":\"About\", \"domain\":\"about.com\", \"key\":\"terms\"},"; + str = str+"{\"company\":\"Mamma\", \"domain\":\"mamma.com\", \"key\":\"query\"},"; + str = str+"{\"company\":\"Alltheweb\", \"domain\":\"alltheweb.com\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Voila\", \"domain\":\"voila.fr\", \"key\":\"rdata\"},"; + str = str+"{\"company\":\"Virgilio\", \"domain\":\"search.virgilio.it\", \"key\":\"qs\"},"; + str = str+"{\"company\":\"Live\", \"domain\":\"bing.com\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Baidu\", \"domain\":\"baidu.com\", \"key\":\"wd\"},"; + str = str+"{\"company\":\"Alice\", \"domain\":\"alice.com\", \"key\":\"qs\"},"; + str = str+"{\"company\":\"Yandex\", \"domain\":\"yandex.com\", \"key\":\"text\"},"; + str = str+"{\"company\":\"Najdi\", \"domain\":\"najdi.org.mk\", \"key\":\"q\"},"; + str = str+"{\"company\":\"AOL\", \"domain\":\"aol.com\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Mama\", \"domain\":\"mamma.com\", \"key\":\"query\"},"; + str = str+"{\"company\":\"Seznam\", \"domain\":\"seznam.cz\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Search\", \"domain\":\"search.com\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Wirtulana Polska\", \"domain\":\"wp.pl\", \"key\":\"szukaj\"},"; + str = str+"{\"company\":\"O*NET\", \"domain\":\"online.onetcenter.org\", \"key\":\"qt\"},"; + str = str+"{\"company\":\"Szukacz\", \"domain\":\"szukacz.pl\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Yam\", \"domain\":\"yam.com\", \"key\":\"k\"},"; + str = str+"{\"company\":\"PCHome\", \"domain\":\"pchome.com\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Kvasir\", \"domain\":\"kvasir.no\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Sesam\", \"domain\":\"sesam.no\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Ozu\", \"domain\":\"ozu.es\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Terra\", \"domain\":\"terra.com\", \"key\":\"query\"},"; + str = str+"{\"company\":\"Mynet\", \"domain\":\"mynet.com\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Ekolay\", \"domain\":\"ekolay.net\", \"key\":\"q\"},"; + str = str+"{\"company\":\"Rambler\", \"domain\":\"rambler.ru\", \"key\":\"words\"}]"; + JSONParser parser = new JSONParser(); + JSONArray searchArray = (JSONArray)parser.parse(str); + + if(!"".equals(Referer)){ + for(int j=0;j= 0){ + String key = (String) ((JSONObject) searchArray.get(j)).get("key"); + key+="="; + + + String[] RefererArr = Referer.split("\\?"); + + if(RefererArr.length>1){ + RefererArr = RefererArr[1].split("&"); + + for(int k=0;k=0){ + String[] keyWordArry = RefererArr[k].split("="); + if(keyWordArry.length>1){ + originKeyWord = keyWordArry[1]; + String keyWord = URLDecoder.decode(keyWordArry[1],"UTF-8"); + company = (String)((JSONObject) searchArray.get(j)).get("company"); + result.put("company",company); + result.put("keyWord",keyWord); + if(keyWord.indexOf("��")>=0){ + keyWord = URLDecoder.decode(keyWordArry[1],"EUC-KR"); + result.put("keyWord",keyWord); + } + } + } + } + } + } + } + } + }catch(IOException e){ + logger.error("예외 상황 발생"); + } + + return result; + } + + + /** + * request 에서 접속중인 클라이언트의 "IP"를 알아 낸다. + * @param request + * @return ip주소(ipv4) + */ + public static String getClientIP(HttpServletRequest request) { + + String ip = request.getHeader("X-FORWARDED-FOR"); + + if (ip == null || ip.length() == 0) { + ip = request.getHeader("Proxy-Client-IP"); + } + + if (ip == null || ip.length() == 0) { + ip = request.getHeader("WL-Proxy-Client-IP"); // 웹로직 + } + + if (ip == null || ip.length() == 0) { + ip = request.getRemoteAddr() ; + } + + return ip; + + } + + + /** + * request String 카운트 입력받아 사칙연산 + * @param numStr1,numStr2 숫자형 문자열, Operator 연산자 : +,-,*,/ + * @return String 연산결과값 + */ + public static String strCalculator(String numStr1, Character Operator, String numStr2) { + + String result = ""; + switch((int)Operator){ + case (int)'+' : + result = Integer.parseInt(numStr1)+Integer.parseInt(numStr2)+""; + break; + case (int)'-' : + result = Integer.parseInt(numStr1)-Integer.parseInt(numStr2)+""; + break; + case (int)'*' : + result = Integer.parseInt(numStr1)*Integer.parseInt(numStr2)+""; + break; + case (int)'/' : + result = Integer.parseInt(numStr1)/Integer.parseInt(numStr2)+""; + break; + } + + return result; + + } + + /** + * user-agent 분석해서 device, os, browser 정보를 HashMap으로 받는다. + * @param userAgent + * @return + * HashMap key + * agent : net.sf.uadetector.ReadableUserAgent agent 기본정보외에 필요한 정보 조회시 agent를 조회 + * os : 운영체제 + * device : 단말기 + * browser : 브라우저 + */ + public static HashMap getUserAgentParse(String userAgent){ + net.sf.uadetector.UserAgentStringParser parser = net.sf.uadetector.service.UADetectorServiceFactory.getResourceModuleParser(); + net.sf.uadetector.ReadableUserAgent agent = parser.parse(userAgent); + + List osVersionGroups = agent.getOperatingSystem().getVersionNumber().getGroups(); + String osVersion = ""; + if(osVersionGroups.size() == 0){ + osVersion = agent.getOperatingSystem().getVersionNumber().getExtension(); + }else if(!"".equals(CommUtil.isNull( agent.getOperatingSystem().getVersionNumber().getExtension(), "") ) ){ + osVersion = agent.getOperatingSystem().getVersionNumber().getExtension(); + }else{ + int cnt = 0; + for(String version : osVersionGroups){ + if(cnt > 0) osVersion += "."; + cnt++; + osVersion += version; + } + } + + List browserVersionGroups = agent.getVersionNumber().getGroups(); + String browserVersion = ""; + if(browserVersionGroups.size() == 0){ + browserVersion = agent.getVersionNumber().getExtension(); + }else if(!"".equals(CommUtil.isNull( agent.getVersionNumber().getExtension(), "") ) ){ + browserVersion = agent.getVersionNumber().getExtension(); + }else{ + int cnt = 0; + for(String version : browserVersionGroups){ + if(cnt > 0) browserVersion += "."; + cnt++; + browserVersion += version; + } + } + + HashMap hm = new HashMap(); + hm.put("agent", agent); + hm.put("device", agent.getDeviceCategory().getName()); + hm.put("os", agent.getOperatingSystem().getName() + " " + osVersion); + hm.put("browser", agent.getName() + " " + browserVersion); + + + //단말 + //agent.getDeviceCategory().getName() + + //브라우저 + //agent.getName() + /* + 아이폰 +Smartphone +safari.png +Mobile Safari +Apple Inc. +Apple Inc. +Mobile Browser +http://en.wikipedia.org/wiki/Safari_%28web_browser%29 +MOBILE_SAFARI +OperatingSystem [family=IOS, familyName=iOS, icon=iphone.png, name=iOS, producer=Apple Inc., producerUrl=http://www.apple.com/, url=http://en.wikipedia.org/wiki/IOS, versionNumber=VersionNumber [groups=[9, 3, 1], extension=]] +MOBILE_BROWSER +VersionNumber [groups=[9, 0, ], extension=] + + + Smartphone +chrome.png +Chrome Mobile +Google Inc. +Google Inc. +Mobile Browser +http://www.google.com/intl/en/chrome/browser/mobile/ +CHROME_MOBILE +OperatingSystem [family=ANDROID, familyName=Android, icon=android.png, name=Android, producer=Google, Inc., producerUrl=http://www.google.com/, url=http://en.wikipedia.org/wiki/Android_%28operating_system%29, versionNumber=VersionNumber [groups=[5, 0, 1], extension=]] +MOBILE_BROWSER +VersionNumber [groups=[34, 0, 1847, 76], extension=] + +Personal computer +chrome.png +Chrome +Google Inc. +Google Inc. +Browser +http://www.google.com/chrome +CHROME +OperatingSystem [family=WINDOWS, familyName=Windows, icon=windows.png, name=Windows, producer=Microsoft Corporation., producerUrl=http://www.microsoft.com/, url=http://en.wikipedia.org/wiki/Windows, versionNumber=VersionNumber [groups=[10, 0, ], extension=]] +BROWSER +VersionNumber [groups=[49, 0, 2623, 110], extension=] +Personal computer + +Personal computer +mozilla.png +Mozilla +Mozilla Foundation +Mozilla Foundation +Browser +http://en.wikipedia.org/wiki/Mozilla +MOZILLA +OperatingSystem [family=WINDOWS, familyName=Windows, icon=windows.png, name=Windows, producer=Microsoft Corporation., producerUrl=http://www.microsoft.com/, url=http://en.wikipedia.org/wiki/Windows, versionNumber=VersionNumber [groups=[10, 0, ], extension=]] +BROWSER +VersionNumber [groups=[, , ], extension=rv:11.0] +Personal computer + +Personal computer +chrome.png +Chrome +Google Inc. +Google Inc. +Browser +http://www.google.com/chrome +CHROME +OperatingSystem [family=WINDOWS, familyName=Windows, icon=windows.png, name=Windows, producer=Microsoft Corporation., producerUrl=http://www.microsoft.com/, url=http://en.wikipedia.org/wiki/Windows, versionNumber=VersionNumber [groups=[10, 0, ], extension=]] +BROWSER +VersionNumber [groups=[46, 0, 2486, 0], extension=] +Personal computer + + */ + return hm; + } + + public static String getTodayforStat(String schOption) { + String today=""; + if("HOUR".equals(schOption)){ + today = getDatePattern("yyyy-MM-dd"); +/* }else if("DAY_W".equals(schOption)){ + Calendar cal = Calendar.getInstance(); + String weekOfMonth=""+cal.get(Calendar.WEEK_OF_MONTH); + today = CommUtil.getDatePattern("yyyy-MM")+"월"+weekOfMonth;*/ + }else if("DAY_M".equals(schOption)){ + today = getDatePattern("yyyy-MM"); + }else if("MONTH".equals(schOption)){ + today = getDatePattern("yyyy"); + }else if("YEAR".equals(schOption)){ + today= ""; + } + return today; + } + + public static String getDateforStat(String Date, String schOption) { + String today=""; + if("HOUR".equals(schOption)){ + today = printDatePattern(Date,"yyyy-MM-dd"); + }else if("DAY_W".equals(schOption)){ + today = printDatePattern(Date,"yyyy-MM"); + }else if("DAY_M".equals(schOption)){ + today = printDatePattern(Date,"yyyy-MM"); + }else if("MONTH".equals(schOption)){ + today = printDatePattern(Date,"yyyy"); + }else if("YEAR".equals(schOption)){ + today = printDatePattern(Date,"yyyy"); + } + return today; + } + + /** + * 다운로드 대상 excel template 파일명을 리틴한다. + * + * @param request + * @param clazzName + * @return String + */ + public static String getExcelTemplateName(HttpServletRequest request, String clazzName) { + + String uri = request.getRequestURI(); + uri = StringUtils.replace(uri.substring(uri.lastIndexOf("/") + 1), ".do", ""); + return clazzName + "." + uri; + } + + /** + * 탭메뉴 링크 + * @param msg + * @param script + * @return + */ + + public static String getMenuLink2(MngrMenuVO menuVO, String siteCode){ + + String idName = ""; //left메뉴 선택표시를 위한 아이디설정 + + idName = "id=\"tab_"+menuVO.getMenuCode()+"\""; + + String url = "#none"; //구분값이 0,1,2,3,4 가 아니면 링크 없음. + String str = ""; + // 메뉴타입에 따른 링크 구분 + //0 폴더, 4 링크 menuVO.getMenuUrl 로 링크 + if("0".equals(menuVO.getMenuType()) + || "4".equals(menuVO.getMenuType()) + ){ + url = menuVO.getMenuUrl(); + }else if("1".equals(menuVO.getMenuType()) //CMS /web/contents/코드로 링크 + || "2".equals(menuVO.getMenuType()) //프로그램 /web/contents/코드로 링크 + || "3".equals(menuVO.getMenuType()) //게시판 /web/contents/코드로 링크 + ){ + url = "/" + siteCode+"/contents/"+menuVO.getMenuCode()+".do"; + } + if("".equals(url)) url = "#none"; + if("0".equals(menuVO.getMenuShowtype())){ + str += ""; + }else if("1".equals(menuVO.getMenuShowtype())){ + str += ""; + }else if("2".equals(menuVO.getMenuShowtype())){ + str += ""; + } + str += menuVO.getMenuName().replaceAll("&", "&")+""; + return str; + } + + public static String getMenuLink(String menuCode, String menuName, String menuType, String menuUrl, String showType, String siteCode){ + + String idName = ""; //left메뉴 선택표시를 위한 아이디설정 + + idName = "id=\"tab_"+menuCode+"\""; + + String url = "#none"; //구분값이 0,1,2,3,4 가 아니면 링크 없음. + String str = ""; + // 메뉴타입에 따른 링크 구분 + //0 폴더, 4 링크 menuVO.getMenuUrl 로 링크 + if("0".equals(menuType) || "4".equals(menuType)){ + url = menuUrl; + }else if("1".equals(menuType) //CMS /web/contents/코드로 링크 + || "2".equals(menuType) //프로그램 /web/contents/코드로 링크 + || "3".equals(menuType) //게시판 /web/contents/코드로 링크 + ){ + url = "/" + siteCode+"/contents/"+menuCode+".do"; + } + if("".equals(url)) url = "#none"; + if("0".equals(showType)){ + str += ""; + }else if("1".equals(showType)){ + str += ""; + }else if("2".equals(showType)){ + str += ""; + } + str += menuName.replaceAll("&", "&")+""; + return str; + } + + /** + * 탭메뉴 링크 + * @param ytUrl : YouTube URL + * @return String + */ + public static String extractYTId(String ytUrl) { + String vId = null; + Pattern pattern = Pattern.compile( + "^https?://.*(?:youtu.be/|v/|u/\\w/|embed/|watch?v=)([^#&?]*).*$", + Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(ytUrl); + + if (matcher.matches()) vId = matcher.group(1); + + return vId; + } + + /** + * 문자열 숫자인지 아닌지 판단 + * @param s : 숫자형 문자열 + * @return true|false + */ + public static boolean isNumeric(String s) { + return s.matches("[-+]?\\d*\\.?\\d+"); + } + + /** + * 배열을 문자열로 변환 + * @param a : 배열 + * @return String + */ + public static String arrayToString(Object[] a) { + if (a == null) + return "null"; + + int iMax = a.length - 1; + if (iMax == -1) + return "[]"; + + StringBuilder b = new StringBuilder(); + b.append('['); + for (int i = 0; ; i++) { + b.append(String.valueOf(a[i])); + if (i == iMax) + return b.append(']').toString(); + b.append(","); + } + } + + /** + * 메뉴 권한을 가지고 있는지 체크 + * @param a : 메뉴ID (e.g. menu01) + * @return boolean + * 사용안함 20170614 + */ + public static boolean mngrLevelTrueFalse(String a) { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + HttpSession session = request.getSession(); + MngrSessionVO mngrSessionVO = (MngrSessionVO)session.getAttribute("mngrSessionVO"); + for (int j2 = 0; j2 < mngrSessionVO.getMngPower().split(",").length; j2++) { + if(mngrSessionVO.getMngPower().split(", ")[j2].equals(a)){ + return true; + } + } + return false; + } + + public static String getMainPageBoard(List boardList, String listType, int titleMaxLength){ + + StringBuffer returnHtml = new StringBuffer(); + + boolean showOpt1 = false; // 첫번째 글의 강조여부 true:강조안함, false:강조함 + + //옵션설정 + switch (listType){ + + case "t1": + + showOpt1 = true; // 첫번째 글의 강조여부 true:강조안함, false:강조함 + + break; + + case "t2": + + showOpt1 = true; // 첫번째 글의 강조여부 true:강조안함, false:강조함 + + break; + default : + + showOpt1 = false; // 첫번째 글의 강조여부 true:강조안함, false:강조함 + + break; + } + + + + BoardVO board; + String boardTypeClass = "n_l"; + + for (int i = 0; i < boardList.size(); i++) { + + MainBoardVO bTmp = boardList.get(i); + StringBuffer tempHtml = new StringBuffer(); + + tempHtml.append("

    ").append(bTmp.getBoardTitle()).append("

    "); + } catch (NullPointerException | IndexOutOfBoundsException e) { + tempHtml.append("latestBbs").append("\">

     

    • 게시판이 선택되지 않았습니다.
    "); + } + + + tempHtml.append("
    "); + + if ("t2".equalsIgnoreCase(listType)) { + + returnHtml.append("
  • "); + returnHtml.append("
    "); + returnHtml.append("

    ").append(bTmp.getBoardTitle()).append("

    "); + returnHtml.append("

    ").append(bTmp.getBoardMemo()).append("

    "); + returnHtml.append(" 더보기   +"); + returnHtml.append(" \"더보기\""); + returnHtml.append("
    "); + returnHtml.append("
    "); + + returnHtml.append(tempHtml.toString()); + + returnHtml.append("
    "); + returnHtml.append("
  • "); + + } else { + returnHtml.append(tempHtml.toString()); + } + + } + + + return returnHtml.toString(); + } + + /** + * 배열스트링(arr) 안에 받아온 String a가 포함 되어있는지 체크 + * @param a : String + * @param arr : String배열 + * @return String + */ + public static boolean strInArrChk(String arr,String a) { + for (int j2 = 0; j2 < arr.split(",").length; j2++) { + if(arr.split(",")[j2].trim().equals(a.trim())){ + return true; + } + } + return false; + } + + + /** + * sha256 암호화 + * @param text + * @return + * @throws IOException + */ + public static String hexSha256(String text) throws IOException, NoSuchAlgorithmException{ + StringBuffer sbuf = new StringBuffer(); + + MessageDigest mDigest = MessageDigest.getInstance("SHA-256"); + mDigest.update(text.getBytes()); + + byte[] msgStr = mDigest.digest() ; + + for(int i=0; i < msgStr.length; i++){ + byte tmpStrByte = msgStr[i]; + String tmpEncTxt = Integer.toString((tmpStrByte & 0xff) + 0x100, 16).substring(1); + + sbuf.append(tmpEncTxt) ; + } + + return sbuf.toString(); + } + + /** + * 문자열을 지정된 지점에서부터 *로 치환(끝나는 지점이 지정되지 않으면 끝까지 치환) + * @param str : 치환할 문자열 + * @param int start : 치환할 시작 위치 + * @return str + * @throws IOException + */ + public static String strConceal(String str, int start, int end) throws IOException{ + if ("".equals(str)) { + return "(내용없음)"; + } + + StringBuilder builder = new StringBuilder(str); + if(0==end) end = str.length(); + for (int i = start; i < end; i++) { + builder.setCharAt(i, '*'); + } + str = builder.toString(); + + return str; + } + + /** + * 현재 위치(URL)이 속한 site의 sitecode를 가져온다. + * @param request + * @param mngrMenuService + * @return str + * @throws IOException + */ + public static String getCurrentSiteCode(HttpServletRequest request, MngrMenuService mngrMenuService) throws IOException, SQLException{ + String currentUrl = (String) request.getAttribute("javax.servlet.forward.request_uri"); + currentUrl = StringUtils.replace(currentUrl.substring(currentUrl.lastIndexOf("/") + 1), ".do", ""); + + MngrMenuVO menuVO = new MngrMenuVO(); + menuVO.setId(currentUrl); + menuVO = mngrMenuService.mngrMenuView(menuVO); + String siteCode = CommUtil.strSplitGet(menuVO.getMenuPfullcode(), "1"); + + return siteCode; + } + + /** + * 구분값에 따라 인클루드 될 모듈 HTML를 가져온다. : 사용안함 + * @param request + * @param mngrMenuService + * @return str + * @throws IOException + */ +// public static String getModule(String moduleName, Object obj, String opt) throws IOException{ +// +// StringBuffer html = new StringBuffer(); +// +// +// switch (moduleName){ +// case "slideSet": +// +// html = getSlideSet(obj,opt); +// +// break; +// default : +// +// break; +// } +// +// +// return html.toString(); +// } + + /** + * 슬라이드 셋 처리 모듈 : 사용중지.. 기능 구현 막힘. + * @param request + * @param mngrMenuService + * @return str + * @throws IOException + */ +// public static StringBuffer getSlideSet(Object obj, String opt) throws IOException{ +// StringBuffer html = new StringBuffer(); +// +// html.append("
      슬라이드영역
    "); +// SystemconfigVO systemconfigVO = new SystemconfigVO(); +// +// if(obj != null){ // 파일이 없는 경우. 빈 Object로 리턴된다. +// +// if(obj instanceof SystemconfigVO){ +// systemconfigVO = (SystemconfigVO) obj; +// +// } +// } +// +// return html; +// } + + /** + * 금지어 정규식을 가져오는 메소드 + * @param request + * @return prohibitRegEx + */ + public static String getProhibitRegEx() { + Object prohibit = CommUtil.getFileObject(((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(), "prohibitDesc"); + + String prohibitRegEx = ""; + + if (prohibit != null && prohibit instanceof String) { + prohibitRegEx = (String) prohibit; + } + + return prohibitRegEx; + } + + /** + * 금지어 정규식 검사 메소드 + * @param request + * @return prohibitRegEx + */ + public static boolean checkProhibitWords(String str) { + + String prohibitRegEx = getProhibitRegEx(); + + return regEx(prohibitRegEx, str); + } + + + /** + * 금지어 정규식 검사 메소드 + * @param request + * @return prohibitRegEx + */ + public static String getProhibitWord(String str) { + + String prohibitRegEx = getProhibitRegEx(); + + java.util.regex.Pattern p = java.util.regex.Pattern.compile(prohibitRegEx, java.util.regex.Pattern.CASE_INSENSITIVE | java.util.regex.Pattern.MULTILINE ); + java.util.regex.Matcher m = p.matcher(str); + int tm = m.end(); + return m.group(); + } + + + public static String styleDisplayNone(int value){ + + if (value == 0) { + return " style='display : none;' "; + } else { + return ""; + } + + } + + public static String newTag(String dt, String printStr) { + + Calendar calendar = Calendar.getInstance(); + Date date = new Date(calendar.getTimeInMillis()); + + dt = printDatePattern(dt, "yyyy-MM-dd"); + + SimpleDateFormat dateStr = new SimpleDateFormat("yyyy-MM-dd"); + + if(dt.startsWith(dateStr.format(date))){ + return printStr; + } + + return ""; + } + + + public static boolean startWith(String str, String prefix){ + return str.startsWith(prefix); + } + + /** + * 특정 날짜에 대하여 요일을 구함(일 ~ 토) + * @param date + * @param datePattern + * @return + * @throws IOException + */ + public String getDateDay(String date, String datePattern) throws IOException, ParseException { + + String[] week = {"일", "월", "화", "수", "목", "금", "토"}; + SimpleDateFormat dateFormat = new SimpleDateFormat(datePattern) ; + Date nDate = dateFormat.parse(date) ; + Calendar cal = Calendar.getInstance() ; + cal.setTime(nDate); + int dayNum = cal.get(Calendar.DAY_OF_WEEK) ; + + return week[dayNum+1] ; + } + + public static String connectDevice() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String agent = isNull(request.getHeader("user-agent"), ""); + String deviceKind = ""; + + if(!"".equals(agent)){ + deviceKind = "PC"; + if(!"".equals(getMobileDevice(agent))){ + deviceKind = getMobileDevice(agent); + } + } + + return deviceKind; + } + + public static List getInnerListToMap(Map> map, String key) { + if (map.get(key)!= null) { + return map.get(key); + } + return null; + } + + /** + * 메뉴 코드 값과 checkbox의 checkArr를 비교하여 checked를 선언 + * @param ccode + * @param checkArr + * @return + * @throws Exception + */ + public static String isContainValue(String ccode, String[] checkArr) { + String retStr = ""; + if(checkArr!=null){ + for(int i=0;i cutlen) break; + sbStr.append(ch); + } + return sbStr.toString()+"..."; + } + } else { + return ""; + } + } +} diff --git a/src/main/java/egovframework/itgcms/util/CreateCodeTag.java b/src/main/java/egovframework/itgcms/util/CreateCodeTag.java new file mode 100644 index 0000000..1c3c74c --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/CreateCodeTag.java @@ -0,0 +1,163 @@ +package egovframework.itgcms.util; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.AutowireCapableBeanFactory; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.servlet.tags.RequestContextAwareTag; + +import egovframework.itgcms.core.code.service.MngrCodeService; +import egovframework.itgcms.core.code.service.MngrCodeVO; + +public class CreateCodeTag extends RequestContextAwareTag { + + /** + * + */ + private static final long serialVersionUID = -2753931298991253239L; + + @Autowired + MngrCodeService mngrCodeService; + + String pcode; + String tagType; + String tagName; + String selectedValue; + String tagTitle; + String className; + String useNullOpt; + + public CreateCodeTag() { + } + + public void setClassName(String className) { + this.className = className; + } + + public void setPcode(String pcode) { + this.pcode = pcode; + } + + public void setTagType(String tagType) { + this.tagType = tagType; + } + + public void setTagName(String tagName){ + this.tagName = tagName; + } + + public void setSelectedValue(String selectedValue){ + this.selectedValue = selectedValue; + } + + public void setTagTitle(String tagTitle) { + this.tagTitle = tagTitle; + } + + public void setUseNullOpt(String useNullOpt) { + this.useNullOpt = useNullOpt; + } + + @Override + protected int doStartTagInternal() throws IOException, SQLException { + // TODO Auto-generated method stub + + if (mngrCodeService == null) { + + WebApplicationContext wac = getRequestContext().getWebApplicationContext(); + AutowireCapableBeanFactory beanFactory = wac.getAutowireCapableBeanFactory(); + // 3. 스프링 빈 주입 + beanFactory.autowireBean(this); + } + + //기본값초기화 + tagType = (tagType == null ? "select" : tagType); + tagTitle = (tagTitle == null ? "" : tagTitle); + selectedValue = (selectedValue == null ? "" : selectedValue); + useNullOpt = (useNullOpt == null ? "N" : useNullOpt); + + MngrCodeVO mngrCodeVO = new MngrCodeVO(); + mngrCodeVO.setSchCode(pcode); + + + try { + + List codeList = mngrCodeService.mngrCodeList(mngrCodeVO); + + StringBuilder sb = new StringBuilder(); + + String conditionStr = "name=\""+tagName+"\" id=\""+tagName+"\"";; + + if(!CommUtil.isNull(tagTitle)){ + conditionStr += " title=\""+tagTitle+"\""; + } + if(!CommUtil.isNull(className)){ + conditionStr += " class=\""+className+"\""; + } + + switch (tagType) { + case "select": + sb.append("\n"); + break; + case "checkbox": + sb.append("\n"); + break; + case "radio": + sb.append("\n"); + break; + default: + sb.append("\n"); + break; + } + + pageContext.getOut().write(sb.toString()); + + } catch (IOException e) { + // TODO Auto-generated catch block + logger.error("예외 상황 발생"); + } + + + return SKIP_BODY; + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/itgcms/util/CustomTagOrderBy.java b/src/main/java/egovframework/itgcms/util/CustomTagOrderBy.java new file mode 100644 index 0000000..ece9d56 --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/CustomTagOrderBy.java @@ -0,0 +1,60 @@ +package egovframework.itgcms.util; + +import java.io.IOException; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.tagext.SimpleTagSupport; + +import egovframework.itgcms.util.CommUtil; + +public class CustomTagOrderBy extends SimpleTagSupport { + + String fieldValue; + String fieldText; + String schOrderFld; + String schOrderBy; + + public CustomTagOrderBy() { + } + public void setFieldValue(String fieldValue) { + this.fieldValue = fieldValue; + } + + public void setFieldText(String fieldText) { + this.fieldText = fieldText; + } + + public void setSchOrderFld(String schOrderFld) { + this.schOrderFld = schOrderFld; + } + + public void setSchOrderBy(String schOrderBy) { + this.schOrderBy = schOrderBy; + } + + public void doTag() throws JspException, IOException { + StringBuilder sb = new StringBuilder(); + + String asc = "asc"; + String icon = "▼"; + if(fieldValue.equals(schOrderFld)){ + if("desc".equals(schOrderBy)){ + asc = "asc"; + icon = "▼"; + }else if("asc".equals(schOrderBy)){ + asc = "desc"; + icon = "▲"; + } + } + sb.append("" + fieldText + " " + icon + ""); + //sb.append(fieldText); + getJspContext().getOut().write(sb.toString()); + + super.doTag(); + } + +} diff --git a/src/main/java/egovframework/itgcms/util/CustomTagSelectCodeList.java b/src/main/java/egovframework/itgcms/util/CustomTagSelectCodeList.java new file mode 100644 index 0000000..64a625e --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/CustomTagSelectCodeList.java @@ -0,0 +1,63 @@ +package egovframework.itgcms.util; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.springframework.web.servlet.tags.RequestContextAwareTag; + +import egovframework.itgcms.core.code.service.MngrCodeVO; + +public class CustomTagSelectCodeList extends RequestContextAwareTag { + + List codeList; + String selectName; + String selectedValue; + String selectTitle; + String className; + + public void setClassName(String className) { + this.className = className; + } + public CustomTagSelectCodeList() { + } + public void setCodeList(List codeList) { + if (codeList != null) { + this.codeList = new ArrayList(codeList); + } + } + public void setSelectName(String selectName){ + this.selectName = selectName == null ? "" : selectName; + } + public void setSelectedValue(String selectedValue){ + this.selectedValue = selectedValue == null ? "" : selectedValue; + } + public void setSelectTitle(String selectTitle) { + this.selectTitle = selectTitle; + } + + @Override + protected int doStartTagInternal() throws IOException { + // TODO Auto-generated method stub + StringBuilder sb = new StringBuilder(); + + sb.append("\n"); + //getJspContext().getOut().write(sb.toString()); + pageContext.getOut().write(sb.toString()); + + + return SKIP_BODY; + } + +} diff --git a/src/main/java/egovframework/itgcms/util/ExcelDownloadView.java b/src/main/java/egovframework/itgcms/util/ExcelDownloadView.java new file mode 100644 index 0000000..4f9d483 --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/ExcelDownloadView.java @@ -0,0 +1,160 @@ +package egovframework.itgcms.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Calendar; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import net.sf.jxls.exception.ParsePropertyException; +import net.sf.jxls.transformer.XLSTransformer; + +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.servlet.view.AbstractView; + +/** + *

    + * 각 Controller에서 excel파일 다운로드시 활용되는 view. + *

    + * + *
    + *  

    -Example

    + * public ModelAndView test(HttpServletRequest request, HttpServletResponse response) throws Exception { + * ModelAndView mav = new ModelAndView(EXCEL_DOWN); + * //다운로드에 사용되어질 엑셀파일 템플릿 + * mav.addObject(DaonExcelDownloadView.DOWN_EXCEL_TEMPLATE, getExcelTemplateName(request, this.getClass().getName())); + * //다운로드시 표시될 파일명 (확장자는 자동으로 xls로 지정된다.) + * mav.addObject(DaonExcelDownloadView.DOWN_FILE_NM, "파일명"); //확장자는 제외한다. + * + * return mav; + * } + *
    + * + * @author + * @date 2009. 10. 7. + */ + +public class ExcelDownloadView extends AbstractView{ + + public static final String EXCEL_DOWN = "excelDown"; + + private static final String FILE_CONTENT_TYPE = "application/vnd.ms-excel"; + + + public static final String DOWN_EXCEL_TEMPLATE = "downExcelTemplate"; + public static final String DOWN_EXCEL_DATA = "downExcelData"; + public static final String DOWN_FILE_NM = "downloadFileName"; + public static final String DOWN_FILE_NM_ENC = "downloadFileNameEncoding"; + private static final String EXCEL_EXTENSION = ".xls"; + + private static final String EXCEL_TEMPLATE_PATH = "WEB-INF/template/xls/"; + private static final String EXCEL_TEMPLATE_PATH_TEMP = "WEB-INF/template/xls/temp/"; + + + public ExcelDownloadView() { + setContentType(FILE_CONTENT_TYPE); + } + + /* + * (non-Javadoc) + * + * @see + * org.springframework.web.servlet.view.AbstractView#renderMergedOutputModel + * (java.util.Map, javax.servlet.http.HttpServletRequest, + * javax.servlet.http.HttpServletResponse) + */ + protected void renderMergedOutputModel(Map model, HttpServletRequest request, + HttpServletResponse response) throws IOException, ParsePropertyException, InvalidFormatException { + Map data = (Map)model.get("data"); + + if(data.get("dataList") != null) { + List tmpList = (List)data.get("dataList"); + if(tmpList.isEmpty()) { + response.setContentType("text/html; charset=UTF-8"); + PrintWriter out = response.getWriter(); + out.println(""); + out.println(""); + out.println(""); + out.println(""); + out.println(""); + + } else { + + //다운로드시 표시될 파일명 + String downFileNm = model.get(DOWN_FILE_NM) == null ? "" : ((String) model.get(DOWN_FILE_NM)) + EXCEL_EXTENSION; + downFileNm = URLDecoder.decode(downFileNm, "UTF-8"); + //다운로드 대상 엑셀 템플릿 파일 + String appRoot = getServletContext().getRealPath("/"); + String templateFile = model.get(DOWN_EXCEL_TEMPLATE) == null ? "" : (String) model.get(DOWN_EXCEL_TEMPLATE); + templateFile = appRoot + EXCEL_TEMPLATE_PATH + templateFile + EXCEL_EXTENSION; + //templateFile = templateFile.replaceAll("/", "\\\\"); + + //다운로드 대상 임시 엑셀파일 + //String downloadTempFile = System.getProperty("java.io.tmpdir") + getRandomFileNm() + EXCEL_EXTENSION; + String downloadTempFile = appRoot + "/" + EXCEL_TEMPLATE_PATH_TEMP + getRandomFileNm() + EXCEL_EXTENSION; + + XLSTransformer transformer = new XLSTransformer(); + transformer.transformXLS(templateFile, model, downloadTempFile); + File downFile = new File(downloadTempFile); + + response.setContentLength((int) downFile.length()); + + String strClient = request.getHeader("User-Agent"); + if ( strClient.indexOf("MSIE") != -1 ) { + response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(downFileNm, "UTF-8") + "\";"); + } else { + response.setHeader("Content-Disposition", "attachment; filename=\"" + new String(downFileNm.getBytes("EUC-KR"), "8859_1") + "\";"); + } + + response.setHeader("Content-Transfer-Encoding", "binary"); + response.setContentType(getContentType()); + OutputStream out = response.getOutputStream(); + FileInputStream fis = null; + try { + fis = new FileInputStream(downFile); + FileCopyUtils.copy(fis, out); + } + finally { + if (fis != null) { + try { + fis.close(); + } + catch (IOException ex) { + logger.error("예외 상황 발생"); + } + } + out.flush(); + //임시로 생성된 파일 삭제. + downFile.deleteOnExit(); + } + + } + } + + } + + /** + * 다운로드 대상 파일을 만들기 위한 임시파일명 생성. + * + * @return String + * @throws Exception + */ + private synchronized String getRandomFileNm() throws IOException { + Calendar cal = Calendar.getInstance(); + return String.valueOf(cal.getTimeInMillis()); + } + + +} diff --git a/src/main/java/egovframework/itgcms/util/GetCode.java b/src/main/java/egovframework/itgcms/util/GetCode.java new file mode 100644 index 0000000..ac73cc3 --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/GetCode.java @@ -0,0 +1,62 @@ +package egovframework.itgcms.util; + +import java.io.IOException; +import java.sql.SQLException; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.AutowireCapableBeanFactory; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.servlet.tags.RequestContextAwareTag; + +import egovframework.itgcms.core.code.service.MngrCodeService; +import egovframework.itgcms.core.code.service.MngrCodeVO; + +public class GetCode extends RequestContextAwareTag { + + /** + * + */ + private static final long serialVersionUID = -322428129515288542L; + + @Autowired + MngrCodeService mngrCodeService; + + String code; + + public GetCode() { + } + + public void setCode(String code) { + this.code = code; + } + + @Override + protected int doStartTagInternal() throws IOException, SQLException { + // TODO Auto-generated method stub + + if (mngrCodeService == null) { + WebApplicationContext wac = getRequestContext().getWebApplicationContext(); + AutowireCapableBeanFactory beanFactory = wac.getAutowireCapableBeanFactory(); + // 3. 스프링 빈 주입 + beanFactory.autowireBean(this); + } + MngrCodeVO mngrCodeVO = new MngrCodeVO(); + mngrCodeVO.setSchCode(code); + try { + + MngrCodeVO codeInfo = mngrCodeService.mngrCodeRegistAjax(mngrCodeVO); + + StringBuilder sb = new StringBuilder(); + sb.append(codeInfo.getCname()); + pageContext.getOut().write(sb.toString()); + + } catch (IOException e) { + // TODO Auto-generated catch block + logger.error("예외 상황 발생"); + } + + + return SKIP_BODY; + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/itgcms/util/KISASeed256.java b/src/main/java/egovframework/itgcms/util/KISASeed256.java new file mode 100644 index 0000000..41020e9 --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/KISASeed256.java @@ -0,0 +1,778 @@ +package egovframework.itgcms.util; + +public class KISASeed256 { + + private static int SS0[] = { + 0x2989a1a8, 0x05858184, 0x16c6d2d4, 0x13c3d3d0, 0x14445054, 0x1d0d111c, 0x2c8ca0ac, 0x25052124, + 0x1d4d515c, 0x03434340, 0x18081018, 0x1e0e121c, 0x11415150, 0x3cccf0fc, 0x0acac2c8, 0x23436360, + 0x28082028, 0x04444044, 0x20002020, 0x1d8d919c, 0x20c0e0e0, 0x22c2e2e0, 0x08c8c0c8, 0x17071314, + 0x2585a1a4, 0x0f8f838c, 0x03030300, 0x3b4b7378, 0x3b8bb3b8, 0x13031310, 0x12c2d2d0, 0x2ecee2ec, + 0x30407070, 0x0c8c808c, 0x3f0f333c, 0x2888a0a8, 0x32023230, 0x1dcdd1dc, 0x36c6f2f4, 0x34447074, + 0x2ccce0ec, 0x15859194, 0x0b0b0308, 0x17475354, 0x1c4c505c, 0x1b4b5358, 0x3d8db1bc, 0x01010100, + 0x24042024, 0x1c0c101c, 0x33437370, 0x18889098, 0x10001010, 0x0cccc0cc, 0x32c2f2f0, 0x19c9d1d8, + 0x2c0c202c, 0x27c7e3e4, 0x32427270, 0x03838380, 0x1b8b9398, 0x11c1d1d0, 0x06868284, 0x09c9c1c8, + 0x20406060, 0x10405050, 0x2383a3a0, 0x2bcbe3e8, 0x0d0d010c, 0x3686b2b4, 0x1e8e929c, 0x0f4f434c, + 0x3787b3b4, 0x1a4a5258, 0x06c6c2c4, 0x38487078, 0x2686a2a4, 0x12021210, 0x2f8fa3ac, 0x15c5d1d4, + 0x21416160, 0x03c3c3c0, 0x3484b0b4, 0x01414140, 0x12425250, 0x3d4d717c, 0x0d8d818c, 0x08080008, + 0x1f0f131c, 0x19899198, 0x00000000, 0x19091118, 0x04040004, 0x13435350, 0x37c7f3f4, 0x21c1e1e0, + 0x3dcdf1fc, 0x36467274, 0x2f0f232c, 0x27072324, 0x3080b0b0, 0x0b8b8388, 0x0e0e020c, 0x2b8ba3a8, + 0x2282a2a0, 0x2e4e626c, 0x13839390, 0x0d4d414c, 0x29496168, 0x3c4c707c, 0x09090108, 0x0a0a0208, + 0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0, 0x05c5c1c4, 0x07878384, 0x14041014, 0x3ecef2fc, 0x24446064, + 0x1eced2dc, 0x2e0e222c, 0x0b4b4348, 0x1a0a1218, 0x06060204, 0x21012120, 0x2b4b6368, 0x26466264, + 0x02020200, 0x35c5f1f4, 0x12829290, 0x0a8a8288, 0x0c0c000c, 0x3383b3b0, 0x3e4e727c, 0x10c0d0d0, + 0x3a4a7278, 0x07474344, 0x16869294, 0x25c5e1e4, 0x26062224, 0x00808080, 0x2d8da1ac, 0x1fcfd3dc, + 0x2181a1a0, 0x30003030, 0x37073334, 0x2e8ea2ac, 0x36063234, 0x15051114, 0x22022220, 0x38083038, + 0x34c4f0f4, 0x2787a3a4, 0x05454144, 0x0c4c404c, 0x01818180, 0x29c9e1e8, 0x04848084, 0x17879394, + 0x35053134, 0x0bcbc3c8, 0x0ecec2cc, 0x3c0c303c, 0x31417170, 0x11011110, 0x07c7c3c4, 0x09898188, + 0x35457174, 0x3bcbf3f8, 0x1acad2d8, 0x38c8f0f8, 0x14849094, 0x19495158, 0x02828280, 0x04c4c0c4, + 0x3fcff3fc, 0x09494148, 0x39093138, 0x27476364, 0x00c0c0c0, 0x0fcfc3cc, 0x17c7d3d4, 0x3888b0b8, + 0x0f0f030c, 0x0e8e828c, 0x02424240, 0x23032320, 0x11819190, 0x2c4c606c, 0x1bcbd3d8, 0x2484a0a4, + 0x34043034, 0x31c1f1f0, 0x08484048, 0x02c2c2c0, 0x2f4f636c, 0x3d0d313c, 0x2d0d212c, 0x00404040, + 0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc, 0x01c1c1c0, 0x2a8aa2a8, 0x3a8ab2b8, 0x0e4e424c, 0x15455154, + 0x3b0b3338, 0x1cccd0dc, 0x28486068, 0x3f4f737c, 0x1c8c909c, 0x18c8d0d8, 0x0a4a4248, 0x16465254, + 0x37477374, 0x2080a0a0, 0x2dcde1ec, 0x06464244, 0x3585b1b4, 0x2b0b2328, 0x25456164, 0x3acaf2f8, + 0x23c3e3e0, 0x3989b1b8, 0x3181b1b0, 0x1f8f939c, 0x1e4e525c, 0x39c9f1f8, 0x26c6e2e4, 0x3282b2b0, + 0x31013130, 0x2acae2e8, 0x2d4d616c, 0x1f4f535c, 0x24c4e0e4, 0x30c0f0f0, 0x0dcdc1cc, 0x08888088, + 0x16061214, 0x3a0a3238, 0x18485058, 0x14c4d0d4, 0x22426260, 0x29092128, 0x07070304, 0x33033330, + 0x28c8e0e8, 0x1b0b1318, 0x05050104, 0x39497178, 0x10809090, 0x2a4a6268, 0x2a0a2228, 0x1a8a9298 + }; + + private static int SS1[] = { + 0x38380830, 0xe828c8e0, 0x2c2d0d21, 0xa42686a2, 0xcc0fcfc3, 0xdc1eced2, 0xb03383b3, 0xb83888b0, + 0xac2f8fa3, 0x60204060, 0x54154551, 0xc407c7c3, 0x44044440, 0x6c2f4f63, 0x682b4b63, 0x581b4b53, + 0xc003c3c3, 0x60224262, 0x30330333, 0xb43585b1, 0x28290921, 0xa02080a0, 0xe022c2e2, 0xa42787a3, + 0xd013c3d3, 0x90118191, 0x10110111, 0x04060602, 0x1c1c0c10, 0xbc3c8cb0, 0x34360632, 0x480b4b43, + 0xec2fcfe3, 0x88088880, 0x6c2c4c60, 0xa82888a0, 0x14170713, 0xc404c4c0, 0x14160612, 0xf434c4f0, + 0xc002c2c2, 0x44054541, 0xe021c1e1, 0xd416c6d2, 0x3c3f0f33, 0x3c3d0d31, 0x8c0e8e82, 0x98188890, + 0x28280820, 0x4c0e4e42, 0xf436c6f2, 0x3c3e0e32, 0xa42585a1, 0xf839c9f1, 0x0c0d0d01, 0xdc1fcfd3, + 0xd818c8d0, 0x282b0b23, 0x64264662, 0x783a4a72, 0x24270723, 0x2c2f0f23, 0xf031c1f1, 0x70324272, + 0x40024242, 0xd414c4d0, 0x40014141, 0xc000c0c0, 0x70334373, 0x64274763, 0xac2c8ca0, 0x880b8b83, + 0xf437c7f3, 0xac2d8da1, 0x80008080, 0x1c1f0f13, 0xc80acac2, 0x2c2c0c20, 0xa82a8aa2, 0x34340430, + 0xd012c2d2, 0x080b0b03, 0xec2ecee2, 0xe829c9e1, 0x5c1d4d51, 0x94148490, 0x18180810, 0xf838c8f0, + 0x54174753, 0xac2e8ea2, 0x08080800, 0xc405c5c1, 0x10130313, 0xcc0dcdc1, 0x84068682, 0xb83989b1, + 0xfc3fcff3, 0x7c3d4d71, 0xc001c1c1, 0x30310131, 0xf435c5f1, 0x880a8a82, 0x682a4a62, 0xb03181b1, + 0xd011c1d1, 0x20200020, 0xd417c7d3, 0x00020202, 0x20220222, 0x04040400, 0x68284860, 0x70314171, + 0x04070703, 0xd81bcbd3, 0x9c1d8d91, 0x98198991, 0x60214161, 0xbc3e8eb2, 0xe426c6e2, 0x58194951, + 0xdc1dcdd1, 0x50114151, 0x90108090, 0xdc1cccd0, 0x981a8a92, 0xa02383a3, 0xa82b8ba3, 0xd010c0d0, + 0x80018181, 0x0c0f0f03, 0x44074743, 0x181a0a12, 0xe023c3e3, 0xec2ccce0, 0x8c0d8d81, 0xbc3f8fb3, + 0x94168692, 0x783b4b73, 0x5c1c4c50, 0xa02282a2, 0xa02181a1, 0x60234363, 0x20230323, 0x4c0d4d41, + 0xc808c8c0, 0x9c1e8e92, 0x9c1c8c90, 0x383a0a32, 0x0c0c0c00, 0x2c2e0e22, 0xb83a8ab2, 0x6c2e4e62, + 0x9c1f8f93, 0x581a4a52, 0xf032c2f2, 0x90128292, 0xf033c3f3, 0x48094941, 0x78384870, 0xcc0cccc0, + 0x14150511, 0xf83bcbf3, 0x70304070, 0x74354571, 0x7c3f4f73, 0x34350531, 0x10100010, 0x00030303, + 0x64244460, 0x6c2d4d61, 0xc406c6c2, 0x74344470, 0xd415c5d1, 0xb43484b0, 0xe82acae2, 0x08090901, + 0x74364672, 0x18190911, 0xfc3ecef2, 0x40004040, 0x10120212, 0xe020c0e0, 0xbc3d8db1, 0x04050501, + 0xf83acaf2, 0x00010101, 0xf030c0f0, 0x282a0a22, 0x5c1e4e52, 0xa82989a1, 0x54164652, 0x40034343, + 0x84058581, 0x14140410, 0x88098981, 0x981b8b93, 0xb03080b0, 0xe425c5e1, 0x48084840, 0x78394971, + 0x94178793, 0xfc3cccf0, 0x1c1e0e12, 0x80028282, 0x20210121, 0x8c0c8c80, 0x181b0b13, 0x5c1f4f53, + 0x74374773, 0x54144450, 0xb03282b2, 0x1c1d0d11, 0x24250521, 0x4c0f4f43, 0x00000000, 0x44064642, + 0xec2dcde1, 0x58184850, 0x50124252, 0xe82bcbe3, 0x7c3e4e72, 0xd81acad2, 0xc809c9c1, 0xfc3dcdf1, + 0x30300030, 0x94158591, 0x64254561, 0x3c3c0c30, 0xb43686b2, 0xe424c4e0, 0xb83b8bb3, 0x7c3c4c70, + 0x0c0e0e02, 0x50104050, 0x38390931, 0x24260622, 0x30320232, 0x84048480, 0x68294961, 0x90138393, + 0x34370733, 0xe427c7e3, 0x24240420, 0xa42484a0, 0xc80bcbc3, 0x50134353, 0x080a0a02, 0x84078783, + 0xd819c9d1, 0x4c0c4c40, 0x80038383, 0x8c0f8f83, 0xcc0ecec2, 0x383b0b33, 0x480a4a42, 0xb43787b3 + }; + + private static int SS2[] = { + 0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3, 0x50541444, 0x111c1d0d, 0xa0ac2c8c, 0x21242505, + 0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e, 0x51501141, 0xf0fc3ccc, 0xc2c80aca, 0x63602343, + 0x20282808, 0x40440444, 0x20202000, 0x919c1d8d, 0xe0e020c0, 0xe2e022c2, 0xc0c808c8, 0x13141707, + 0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b, 0xb3b83b8b, 0x13101303, 0xd2d012c2, 0xe2ec2ece, + 0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888, 0x32303202, 0xd1dc1dcd, 0xf2f436c6, 0x70743444, + 0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x53541747, 0x505c1c4c, 0x53581b4b, 0xb1bc3d8d, 0x01000101, + 0x20242404, 0x101c1c0c, 0x73703343, 0x90981888, 0x10101000, 0xc0cc0ccc, 0xf2f032c2, 0xd1d819c9, + 0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383, 0x93981b8b, 0xd1d011c1, 0x82840686, 0xc1c809c9, + 0x60602040, 0x50501040, 0xa3a02383, 0xe3e82bcb, 0x010c0d0d, 0xb2b43686, 0x929c1e8e, 0x434c0f4f, + 0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848, 0xa2a42686, 0x12101202, 0xa3ac2f8f, 0xd1d415c5, + 0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141, 0x52501242, 0x717c3d4d, 0x818c0d8d, 0x00080808, + 0x131c1f0f, 0x91981989, 0x00000000, 0x11181909, 0x00040404, 0x53501343, 0xf3f437c7, 0xe1e021c1, + 0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707, 0xb0b03080, 0x83880b8b, 0x020c0e0e, 0xa3a82b8b, + 0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d, 0x61682949, 0x707c3c4c, 0x01080909, 0x02080a0a, + 0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0xc1c405c5, 0x83840787, 0x10141404, 0xf2fc3ece, 0x60642444, + 0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a, 0x02040606, 0x21202101, 0x63682b4b, 0x62642646, + 0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a, 0x000c0c0c, 0xb3b03383, 0x727c3e4e, 0xd0d010c0, + 0x72783a4a, 0x43440747, 0x92941686, 0xe1e425c5, 0x22242606, 0x80800080, 0xa1ac2d8d, 0xd3dc1fcf, + 0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e, 0x32343606, 0x11141505, 0x22202202, 0x30383808, + 0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c, 0x81800181, 0xe1e829c9, 0x80840484, 0x93941787, + 0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x303c3c0c, 0x71703141, 0x11101101, 0xc3c407c7, 0x81880989, + 0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8, 0x90941484, 0x51581949, 0x82800282, 0xc0c404c4, + 0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747, 0xc0c000c0, 0xc3cc0fcf, 0xd3d417c7, 0xb0b83888, + 0x030c0f0f, 0x828c0e8e, 0x42400242, 0x23202303, 0x91901181, 0x606c2c4c, 0xd3d81bcb, 0xa0a42484, + 0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2, 0x636c2f4f, 0x313c3d0d, 0x212c2d0d, 0x40400040, + 0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1, 0xa2a82a8a, 0xb2b83a8a, 0x424c0e4e, 0x51541545, + 0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x737c3f4f, 0x909c1c8c, 0xd0d818c8, 0x42480a4a, 0x52541646, + 0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646, 0xb1b43585, 0x23282b0b, 0x61642545, 0xf2f83aca, + 0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f, 0x525c1e4e, 0xf1f839c9, 0xe2e426c6, 0xb2b03282, + 0x31303101, 0xe2e82aca, 0x616c2d4d, 0x535c1f4f, 0xe0e424c4, 0xf0f030c0, 0xc1cc0dcd, 0x80880888, + 0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4, 0x62602242, 0x21282909, 0x03040707, 0x33303303, + 0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949, 0x90901080, 0x62682a4a, 0x22282a0a, 0x92981a8a + }; + + private static int SS3[] = { + 0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426, 0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x88b0b838, + 0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407, 0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b, + 0xc3c3c003, 0x42626022, 0x03333033, 0x85b1b435, 0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427, + 0xc3d3d013, 0x81919011, 0x01111011, 0x06020406, 0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x4b43480b, + 0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828, 0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434, + 0xc2c2c002, 0x45414405, 0xc1e1e021, 0xc6d2d416, 0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818, + 0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e, 0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0xcfd3dc1f, + 0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a, 0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032, + 0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000, 0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b, + 0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f, 0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434, + 0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829, 0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838, + 0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405, 0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839, + 0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031, 0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031, + 0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002, 0x02222022, 0x04000404, 0x48606828, 0x41717031, + 0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819, 0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819, + 0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c, 0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010, + 0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a, 0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f, + 0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022, 0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d, + 0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a, 0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e, + 0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012, 0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c, + 0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435, 0x4f737c3f, 0x05313435, 0x00101010, 0x03030003, + 0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434, 0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809, + 0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000, 0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405, + 0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a, 0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003, + 0x85818405, 0x04101414, 0x89818809, 0x8b93981b, 0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839, + 0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002, 0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f, + 0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d, 0x05212425, 0x4f434c0f, 0x00000000, 0x46424406, + 0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b, 0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d, + 0x00303030, 0x85919415, 0x45616425, 0x0c303c3c, 0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c, + 0x0e020c0e, 0x40505010, 0x09313839, 0x06222426, 0x02323032, 0x84808404, 0x49616829, 0x83939013, + 0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424, 0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407, + 0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f, 0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437 + }; + + private static int[] KC = { + 0x9e3779b9, 0x3c6ef373, 0x78dde6e6, 0xf1bbcdcc, 0xe3779b99, + 0xc6ef3733, 0x8dde6e67, 0x1bbcdccf, 0x3779b99e, 0x6ef3733c, + 0xdde6e678, 0xbbcdccf1, 0x779b99e3, 0xef3733c6, 0xde6e678d, + 0xbcdccf1b, 0x79b99e37, 0xf3733c6e, 0xe6e678dd, 0xcdccf1bb, + 0x9b99e377, 0x3733c6ef, 0x6e678dde, 0xdccf1bbc + }; + + private static Boolean BIG = true; + private static Boolean ENDIAN = BIG; // Java virtual machine uses big endian as a default + private static String Key = "2017i0313860651t012g345o678o901d"; + + private static int GetB0 (int A) { + return (int) (0x000000ff & (A)); + }; + + private static int GetB1 (int A) { + return (int) (0x000000ff & ((A) >>> 8)); + }; + + private static int GetB2 (int A) { + return (int) (0x000000ff & ((A) >>> 16)); + }; + + private static int GetB3 (int A) { + return (int) (0x000000ff & ((A) >>> 24)); + }; + + private static void EndianChange (int dws[]) { + dws[0] = (dws[0] >>> 24) | (dws[0] << 24) | ((dws[0] << 8) & 0x00ff0000) | ((dws[0] >>> 8) & 0x0000ff00); + } + + private static int EndianChange (int dws) { + return (dws >>> 24) | (dws << 24) | ((dws << 8) & 0x00ff0000) | ((dws >>> 8) & 0x0000ff00); + } + + private static void SeedRound (int L0[], int L1[], int R0[], int R1[], int K[]) { + int T0, T1; + long T00 = 0, T11 = 0; + + T0 = R0[0] ^ K[0]; + T1 = R1[0] ^ K[1]; + T1 ^= T0; + T00 = (T0 < 0) ? (long) (T0 & 0x7fffffff) | (long) (0x80000000) : (long) (T0); + T1 = SS0[GetB0 (T1)] ^ SS1[GetB1 (T1)] ^ SS2[GetB2 (T1)] ^ SS3[GetB3 (T1)]; + T11 = (T1 < 0) ? (long) (T1 & 0x7fffffff) | (long) (0x80000000) : (long) (T1); + T00 += T11; + T0 = SS0[GetB0 ((int) T00)] ^ SS1[GetB1 ((int) T00)] ^ SS2[GetB2 ((int) T00)] ^ SS3[GetB3 ((int) T00)]; + T00 = (T0 < 0) ? (long) (T0 & 0x7fffffff) | (long) (0x80000000) : (long) (T0); + T11 += T00; + T1 = SS0[GetB0 ((int) T11)] ^ SS1[GetB1 ((int) T11)] ^ SS2[GetB2 ((int) T11)] ^ SS3[GetB3 ((int) T11)]; + T11 = (T1 < 0) ? (long) (T1 & 0x7fffffff) | (long) (0x80000000) : (long) (T1); + T00 += T11; + + L0[0] ^= (int) T00; + L1[0] ^= (int) T11; + } + + public static void SeedEncrypt (byte pbData[], int pdwRoundKey[], byte outData[]) { + int L0[] = new int[1]; + int L1[] = new int[1]; + int R0[] = new int[1]; + int R1[] = new int[1]; + L0[0] = 0x0; + L1[0] = 0x0; + R0[0] = 0x0; + R1[0] = 0x0; + int K[] = new int[2]; + + L0[0] = ((int) pbData[0] & 0x000000ff); + L0[0] = ((L0[0]) << 8) ^ ((int) pbData[1] & 0x000000ff); + L0[0] = ((L0[0]) << 8) ^ ((int) pbData[2] & 0x000000ff); + L0[0] = ((L0[0]) << 8) ^ ((int) pbData[3] & 0x000000ff); + + L1[0] = ((int) pbData[4] & 0x000000ff); + L1[0] = ((L1[0]) << 8) ^ ((int) pbData[5] & 0x000000ff); + L1[0] = ((L1[0]) << 8) ^ ((int) pbData[6] & 0x000000ff); + L1[0] = ((L1[0]) << 8) ^ ((int) pbData[7] & 0x000000ff); + + R0[0] = ((int) pbData[8] & 0x000000ff); + R0[0] = ((R0[0]) << 8) ^ ((int) pbData[9] & 0x000000ff); + R0[0] = ((R0[0]) << 8) ^ ((int) pbData[10] & 0x000000ff); + R0[0] = ((R0[0]) << 8) ^ ((int) pbData[11] & 0x000000ff); + + R1[0] = ((int) pbData[12] & 0x000000ff); + R1[0] = ((R1[0]) << 8) ^ ((int) pbData[13] & 0x000000ff); + R1[0] = ((R1[0]) << 8) ^ ((int) pbData[14] & 0x000000ff); + R1[0] = ((R1[0]) << 8) ^ ((int) pbData[15] & 0x000000ff); + + if (!ENDIAN) { + EndianChange (L0); + EndianChange (L1); + EndianChange (R0); + EndianChange (R1); + } + + int nCount = 0; + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (L0, L1, R0, R1, K); /* 1 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (R0, R1, L0, L1, K); /* 2 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (L0, L1, R0, R1, K); /* 3 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (R0, R1, L0, L1, K); /* 4 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (L0, L1, R0, R1, K); /* 5 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (R0, R1, L0, L1, K); /* 6 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (L0, L1, R0, R1, K); /* 7 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (R0, R1, L0, L1, K); /* 8 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (L0, L1, R0, R1, K); /* 9 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (R0, R1, L0, L1, K); /* 10 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (L0, L1, R0, R1, K); /* 11 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (R0, R1, L0, L1, K); /* 12 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (L0, L1, R0, R1, K); /* 13 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (R0, R1, L0, L1, K); /* 14 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (L0, L1, R0, R1, K); /* 15 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (R0, R1, L0, L1, K); /* 16 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (L0, L1, R0, R1, K); /* 17 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (R0, R1, L0, L1, K); /* 18 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (L0, L1, R0, R1, K); /* 19 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (R0, R1, L0, L1, K); /* 20 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (L0, L1, R0, R1, K); /* 21 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (R0, R1, L0, L1, K); /* 22 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (L0, L1, R0, R1, K); /* 23 */ + K[0] = pdwRoundKey[nCount++]; + K[1] = pdwRoundKey[nCount++]; + SeedRound (R0, R1, L0, L1, K); /* 24 */ + + if (!ENDIAN) { + EndianChange (L0); + EndianChange (L1); + EndianChange (R0); + EndianChange (R1); + } + + for (int i = 0; i < 4; i++) { + outData[i] = (byte) (((R0[0]) >>> (8 * (3 - i))) & 0xff); + outData[4 + i] = (byte) (((R1[0]) >>> (8 * (3 - i))) & 0xff); + outData[8 + i] = (byte) (((L0[0]) >>> (8 * (3 - i))) & 0xff); + outData[12 + i] = (byte) (((L1[0]) >>> (8 * (3 - i))) & 0xff); + } + } + + public static void SeedDecrypt (byte pbData[], int pdwRoundKey[], byte outData[]) { + int L0[] = new int[1]; + int L1[] = new int[1]; + int R0[] = new int[1]; + int R1[] = new int[1]; + int K[] = new int[2]; + L0[0] = 0x0; + L1[0] = 0x0; + R0[0] = 0x0; + R1[0] = 0x0; + + L0[0] = ((int) pbData[0] & 0x000000ff); + L0[0] = ((L0[0]) << 8) ^ ((int) pbData[1] & 0x000000ff); + L0[0] = ((L0[0]) << 8) ^ ((int) pbData[2] & 0x000000ff); + L0[0] = ((L0[0]) << 8) ^ ((int) pbData[3] & 0x000000ff); + + L1[0] = ((int) pbData[4] & 0x000000ff); + L1[0] = ((L1[0]) << 8) ^ ((int) pbData[5] & 0x000000ff); + L1[0] = ((L1[0]) << 8) ^ ((int) pbData[6] & 0x000000ff); + L1[0] = ((L1[0]) << 8) ^ ((int) pbData[7] & 0x000000ff); + + R0[0] = ((int) pbData[8] & 0x000000ff); + R0[0] = ((R0[0]) << 8) ^ ((int) pbData[9] & 0x000000ff); + R0[0] = ((R0[0]) << 8) ^ ((int) pbData[10] & 0x000000ff); + R0[0] = ((R0[0]) << 8) ^ ((int) pbData[11] & 0x000000ff); + + R1[0] = ((int) pbData[12] & 0x000000ff); + R1[0] = ((R1[0]) << 8) ^ ((int) pbData[13] & 0x000000ff); + R1[0] = ((R1[0]) << 8) ^ ((int) pbData[14] & 0x000000ff); + R1[0] = ((R1[0]) << 8) ^ ((int) pbData[15] & 0x000000ff); + + if (!ENDIAN) { + EndianChange (L0); + EndianChange (L1); + EndianChange (R0); + EndianChange (R1); + } + + int nCount = 47; + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (L0, L1, R0, R1, K); /* 1 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (R0, R1, L0, L1, K); /* 2 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (L0, L1, R0, R1, K); /* 3 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (R0, R1, L0, L1, K); /* 4 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (L0, L1, R0, R1, K); /* 5 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (R0, R1, L0, L1, K); /* 6 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (L0, L1, R0, R1, K); /* 7 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (R0, R1, L0, L1, K); /* 8 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (L0, L1, R0, R1, K); /* 9 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (R0, R1, L0, L1, K); /* 10 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (L0, L1, R0, R1, K); /* 11 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (R0, R1, L0, L1, K); /* 12 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (L0, L1, R0, R1, K); /* 13 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (R0, R1, L0, L1, K); /* 14 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (L0, L1, R0, R1, K); /* 15 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (R0, R1, L0, L1, K); /* 16 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (L0, L1, R0, R1, K); /* 17 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (R0, R1, L0, L1, K); /* 18 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (L0, L1, R0, R1, K); /* 19 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (R0, R1, L0, L1, K); /* 20 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (L0, L1, R0, R1, K); /* 21 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (R0, R1, L0, L1, K); /* 22 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (L0, L1, R0, R1, K); /* 23 */ + K[1] = pdwRoundKey[nCount--]; + K[0] = pdwRoundKey[nCount--]; + SeedRound (R0, R1, L0, L1, K); /* 24 */ + + if (!ENDIAN) { + EndianChange (L0); + EndianChange (L1); + EndianChange (R0); + EndianChange (R1); + } + + for (int i = 0; i < 4; i++) { + outData[i] = (byte) (((R0[0]) >>> (8 * (3 - i))) & 0xff); + outData[4 + i] = (byte) (((R1[0]) >>> (8 * (3 - i))) & 0xff); + outData[8 + i] = (byte) (((L0[0]) >>> (8 * (3 - i))) & 0xff); + outData[12 + i] = (byte) (((L1[0]) >>> (8 * (3 - i))) & 0xff); + } + } + + private static void EncRoundKeyUpdate0 (int K[], int A[], int B[], int C[], int D[], int E[], int F[], int G[], int H[], int Z, int rot) { + int T0; + int T00, T11; + + T0 = D[0]; + + D[0] = (D[0] >>> rot) ^ (C[0] << (32 - rot)); + C[0] = (C[0] >>> rot) ^ (B[0] << (32 - rot)); + B[0] = (B[0] >>> rot) ^ (A[0] << (32 - rot)); + A[0] = (A[0] >>> rot) ^ (T0 << (32 - rot)); + + T00 = ((((int) A[0] + (int) C[0]) ^ (int) E[0]) - (int) F[0]) ^ (int) KC[Z]; + T11 = ((((int) B[0] - (int) D[0]) ^ (int) G[0]) + (int) H[0]) ^ (int) KC[Z]; + + K[0] = SS0[GetB0 ((int) T00)] ^ SS1[GetB1 ((int) T00)] ^ SS2[GetB2 ((int) T00)] ^ SS3[GetB3 ((int) T00)]; + K[1] = SS0[GetB0 ((int) T11)] ^ SS1[GetB1 ((int) T11)] ^ SS2[GetB2 ((int) T11)] ^ SS3[GetB3 ((int) T11)]; + } + + private static void EncRoundKeyUpdate1 (int K[], int A[], int B[], int C[], int D[], int E[], int F[], int G[], int H[], int Z, int rot) { + int T0; + int T00, T11; + + T0 = E[0]; + + E[0] = (E[0] << rot) ^ (F[0] >>> (32 - rot)); + F[0] = (F[0] << rot) ^ (G[0] >>> (32 - rot)); + G[0] = (G[0] << rot) ^ (H[0] >>> (32 - rot)); + H[0] = (H[0] << rot) ^ (T0 >>> (32 - rot)); + + T00 = ((((int) A[0] + (int) C[0]) ^ (int) E[0]) - (int) F[0]) ^ (int) KC[Z]; + T11 = ((((int) B[0] - (int) D[0]) ^ (int) G[0]) + (int) H[0]) ^ (int) KC[Z]; + + K[0] = SS0[GetB0 ((int) T00)] ^ SS1[GetB1 ((int) T00)] ^ SS2[GetB2 ((int) T00)] ^ SS3[GetB3 ((int) T00)]; + K[1] = SS0[GetB0 ((int) T11)] ^ SS1[GetB1 ((int) T11)] ^ SS2[GetB2 ((int) T11)] ^ SS3[GetB3 ((int) T11)]; + } + + public static void SeedRoundKey (int pdwRoundKey[], byte pbUserKey[]) { + int A[] = new int[1]; + int B[] = new int[1]; + int C[] = new int[1]; + int D[] = new int[1]; + int E[] = new int[1]; + int F[] = new int[1]; + int G[] = new int[1]; + int H[] = new int[1]; + + int K[] = new int[2]; + + int T0, T1; + int nCount = 2; + + A[0] = ((int) pbUserKey[0] & 0x000000ff); + A[0] = (A[0] << 8) ^ ((int) pbUserKey[1] & 0x000000ff); + A[0] = (A[0] << 8) ^ ((int) pbUserKey[2] & 0x000000ff); + A[0] = (A[0] << 8) ^ ((int) pbUserKey[3] & 0x000000ff); + + B[0] = ((int) pbUserKey[4] & 0x000000ff); + B[0] = (B[0] << 8) ^ ((int) pbUserKey[5] & 0x000000ff); + B[0] = (B[0] << 8) ^ ((int) pbUserKey[6] & 0x000000ff); + B[0] = (B[0] << 8) ^ ((int) pbUserKey[7] & 0x000000ff); + + C[0] = ((int) pbUserKey[8] & 0x000000ff); + C[0] = (C[0] << 8) ^ ((int) pbUserKey[9] & 0x000000ff); + C[0] = (C[0] << 8) ^ ((int) pbUserKey[10] & 0x000000ff); + C[0] = (C[0] << 8) ^ ((int) pbUserKey[11] & 0x000000ff); + + D[0] = ((int) pbUserKey[12] & 0x000000ff); + D[0] = (D[0] << 8) ^ ((int) pbUserKey[13] & 0x000000ff); + D[0] = (D[0] << 8) ^ ((int) pbUserKey[14] & 0x000000ff); + D[0] = (D[0] << 8) ^ ((int) pbUserKey[15] & 0x000000ff); + + E[0] = ((int) pbUserKey[16] & 0x000000ff); + E[0] = (E[0] << 8) ^ ((int) pbUserKey[17] & 0x000000ff); + E[0] = (E[0] << 8) ^ ((int) pbUserKey[18] & 0x000000ff); + E[0] = (E[0] << 8) ^ ((int) pbUserKey[19] & 0x000000ff); + + F[0] = ((int) pbUserKey[20] & 0x000000ff); + F[0] = (F[0] << 8) ^ ((int) pbUserKey[21] & 0x000000ff); + F[0] = (F[0] << 8) ^ ((int) pbUserKey[22] & 0x000000ff); + F[0] = (F[0] << 8) ^ ((int) pbUserKey[23] & 0x000000ff); + + G[0] = ((int) pbUserKey[24] & 0x000000ff); + G[0] = (G[0] << 8) ^ ((int) pbUserKey[25] & 0x000000ff); + G[0] = (G[0] << 8) ^ ((int) pbUserKey[26] & 0x000000ff); + G[0] = (G[0] << 8) ^ ((int) pbUserKey[27] & 0x000000ff); + + H[0] = ((int) pbUserKey[28] & 0x000000ff); + H[0] = (H[0] << 8) ^ ((int) pbUserKey[29] & 0x000000ff); + H[0] = (H[0] << 8) ^ ((int) pbUserKey[30] & 0x000000ff); + H[0] = (H[0] << 8) ^ ((int) pbUserKey[31] & 0x000000ff); + + if (!ENDIAN) { + A[0] = EndianChange (A[0]); + B[0] = EndianChange (B[0]); + C[0] = EndianChange (C[0]); + D[0] = EndianChange (D[0]); + E[0] = EndianChange (E[0]); + F[0] = EndianChange (F[0]); + G[0] = EndianChange (G[0]); + H[0] = EndianChange (H[0]); + } + + T0 = ((((int) A[0] + (int) C[0]) ^ (int) E[0]) - (int) F[0]) ^ (int) KC[0]; + T1 = ((((int) B[0] - (int) D[0]) ^ (int) G[0]) - (int) H[0]) ^ (int) KC[0]; + + pdwRoundKey[0] = SS0[GetB0 ((int) T0)] ^ SS1[GetB1 ((int) T0)] ^ SS2[GetB2 ((int) T0)] ^ SS3[GetB3 ((int) T0)]; + pdwRoundKey[1] = SS0[GetB0 ((int) T1)] ^ SS1[GetB1 ((int) T1)] ^ SS2[GetB2 ((int) T1)] ^ SS3[GetB3 ((int) T1)]; + + EncRoundKeyUpdate0 (K, A, B, C, D, E, F, G, H, 1, 9); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate1 (K, A, B, C, D, E, F, G, H, 2, 9); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate0 (K, A, B, C, D, E, F, G, H, 3, 11); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate1 (K, A, B, C, D, E, F, G, H, 4, 11); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate0 (K, A, B, C, D, E, F, G, H, 5, 12); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate1 (K, A, B, C, D, E, F, G, H, 6, 12); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate0 (K, A, B, C, D, E, F, G, H, 7, 9); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate1 (K, A, B, C, D, E, F, G, H, 8, 9); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate0 (K, A, B, C, D, E, F, G, H, 9, 11); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate1 (K, A, B, C, D, E, F, G, H, 10, 11); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate0 (K, A, B, C, D, E, F, G, H, 11, 12); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate1 (K, A, B, C, D, E, F, G, H, 12, 12); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate0 (K, A, B, C, D, E, F, G, H, 13, 9); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate1 (K, A, B, C, D, E, F, G, H, 14, 9); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate0 (K, A, B, C, D, E, F, G, H, 15, 11); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate1 (K, A, B, C, D, E, F, G, H, 16, 11); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate0 (K, A, B, C, D, E, F, G, H, 17, 12); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate1 (K, A, B, C, D, E, F, G, H, 18, 12); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate0 (K, A, B, C, D, E, F, G, H, 19, 9); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate1 (K, A, B, C, D, E, F, G, H, 20, 9); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate0 (K, A, B, C, D, E, F, G, H, 21, 11); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate1 (K, A, B, C, D, E, F, G, H, 22, 11); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + + EncRoundKeyUpdate0 (K, A, B, C, D, E, F, G, H, 23, 12); + pdwRoundKey[nCount++] = K[0]; + pdwRoundKey[nCount++] = K[1]; + } + + public static int KEY_SIZE = 48; + public static int TEXT_SIZE = 16; + + public static byte[] SeedEncrypt (byte[] password) { + int pdwRoundKey[] = new int[48]; + byte pbCipher[] = new byte[TEXT_SIZE]; + + SeedRoundKey (pdwRoundKey, Key.getBytes ()); + SeedEncrypt (password, pdwRoundKey, pbCipher); + + return pbCipher; + } + + public static byte[] SeedEncrypt (String password) { + return SeedEncrypt (password.getBytes ()); + } + + public static String Decrypt (byte[] hash) { + byte[] result = new byte[hash.length]; + int pdwRoundKey[] = new int[KEY_SIZE]; + SeedRoundKey (pdwRoundKey, Key.getBytes ()); + + byte[] temp = new byte[TEXT_SIZE]; + byte[] temp2 = new byte[TEXT_SIZE]; + + int loop = 0; + if (hash.length <= TEXT_SIZE) { + SeedDecrypt (hash, pdwRoundKey, result); + } else { + loop = (int) Math.ceil ((double) hash.length / TEXT_SIZE); + for (int i = 0; i < loop; i++) { + for (int j = 0; j < TEXT_SIZE; j++) { + temp2[j] = hash[(i * TEXT_SIZE) + j]; + } + SeedDecrypt (temp2, pdwRoundKey, temp); + for (int j = 0; j < temp.length; j++) { + result[(i * TEXT_SIZE) + j] = temp[j]; + } + } + + } + result = AnsiX923Padding.removePadding (result, TEXT_SIZE); + return new String (result, 0, result.length); + } + + /** + * 복호화 + * @param hash + * @return + */ + public static String Decrypt (String hash) { + try{ + if(CommUtil.isNull (hash)) { + return null; + }else if(hash.length () == 1) { + return hash; + }else if(CommUtil.isNumeric(hash)) { + return hash; + }else { + byte[] hashArray = new byte[hash.length () / 2]; + int count = 0; + for (int i = 0; i < (hashArray.length * 2); i += 2) { + hashArray[count] = (byte) Integer.parseInt (String.valueOf (Long.decode ("0x" + hash.substring (i, i + 2)))); + count++; + } + return Decrypt (hashArray); + } + }catch (NumberFormatException e) { + return hash; + }catch (ArrayIndexOutOfBoundsException e) { + return hash; + } + } + + /** + * 암호화 + * @param password + * @return + */ + public static String Encrypt (String password) { + if(CommUtil.isNull (password)) { + return null; + } + if(password.length () == 1) { + return password; + }else { + byte[] pwdByte = password.getBytes (); + int loop = (int) Math.ceil ((double) pwdByte.length / TEXT_SIZE); + byte[] result = new byte[TEXT_SIZE * loop]; + + byte[] temp = new byte[TEXT_SIZE]; + if (pwdByte.length <= TEXT_SIZE) { + temp = SeedEncrypt (AnsiX923Padding.addPadding (password.getBytes (), TEXT_SIZE)); + for (int j = 0; j < temp.length; j++) + result[j] = temp[j]; + } else { + int end = 0; + int term = TEXT_SIZE; + for (int i = 0; i < loop; i++) { + if ((pwdByte.length - end) <= TEXT_SIZE) { + term = pwdByte.length - end; + temp = SeedEncrypt (AnsiX923Padding.addPadding (new String (pwdByte, i * TEXT_SIZE, term).getBytes (), TEXT_SIZE)); + for (int j = 0; j < temp.length; j++) + result[(i * TEXT_SIZE) + j] = temp[j]; + } else { + temp = SeedEncrypt (new String (pwdByte, i * TEXT_SIZE, term)); + for (int j = 0; j < temp.length; j++) + result[(i * TEXT_SIZE) + j] = temp[j]; + } + end += TEXT_SIZE; + } + } + + String resultHash = ""; + for (byte hash : result) { + resultHash += CommUtil.getZeroPlus (Integer.toHexString (0xff & hash), 2); + } + return resultHash; + } + } +} \ No newline at end of file diff --git a/src/main/java/egovframework/itgcms/util/NewGpkiUtil.java b/src/main/java/egovframework/itgcms/util/NewGpkiUtil.java new file mode 100644 index 0000000..2cf5f9f --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/NewGpkiUtil.java @@ -0,0 +1,380 @@ +package egovframework.itgcms.util; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.apache.log4j.Logger; + +import com.gpki.gpkiapi_jni; +import com.gpki.gpkiapi.GpkiApi; +import com.gpki.gpkiapi.cert.X509Certificate; +import com.gpki.gpkiapi.crypto.PrivateKey; +import com.gpki.gpkiapi.storage.Disk; + +public class NewGpkiUtil { + private static Logger logger = Logger.getLogger(NewGpkiUtil.class); + byte[] myEnvCert, myEnvKey, mySigCert, mySigKey; + private Map targetServerCertMap = new HashMap(); + + // properties + private String myServerId; + private String targetServerIdList; + private String envCertFilePathName; + private String envPrivateKeyFilePathName; + private String envPrivateKeyPasswd; + private String sigCertFilePathName; + private String sigPrivateKeyFilePathName; + private String sigPrivateKeyPasswd; + private String certFilePath; + private String gpkiLicPath = "."; + private boolean isLDAP; + private boolean testGPKI = false; + + public void init() throws Exception { + GpkiApi.init(gpkiLicPath); + gpkiapi_jni gpki = this.getGPKI(); + if(logger.isDebugEnabled()){ + if(gpki.API_GetInfo()==0) + logger.debug(gpki.sReturnString); + else + logger.error(gpki.sDetailErrorString); + } + if(targetServerIdList!=null){ + String certIdList[] = targetServerIdList.split(","); + for(int i = 0 ; i < certIdList.length ; i++){ + String certId = certIdList[i].trim(); + if(!certId.equals("")){ + load(gpki, certId); + } + } + } + + logger.info("Loading gpki certificate : myServerId=" + + this.getMyServerId()); + + X509Certificate _myEnvCert = Disk.readCert(this + .getEnvCertFilePathName()); + myEnvCert = _myEnvCert.getCert(); + + PrivateKey _myEnvKey = Disk.readPriKey(this + .getEnvPrivateKeyFilePathName(), this.getEnvPrivateKeyPasswd()); + myEnvKey = _myEnvKey.getKey(); + + X509Certificate _mySigCert = Disk.readCert(this + .getSigCertFilePathName()); + mySigCert = _mySigCert.getCert(); + + PrivateKey _mySigKey = Disk.readPriKey(this + .getSigPrivateKeyFilePathName(), this.getSigPrivateKeyPasswd()); + mySigKey = _mySigKey.getKey(); + + //test my cert GPKI + if(testGPKI){ + load(gpki, this.getMyServerId()); + testGpki(gpki); + } + this.finish(gpki); + logger.info("GpkiUtil initialized"); + } + + private void load(gpkiapi_jni gpki, String certId) throws Exception { + + logger.debug("Loading gpki certificate : targetServerId=" + + certId); + + X509Certificate cert = targetServerCertMap.get(certId); + if (cert != null) { + return; + } + + if (isLDAP) { + String ldapUrl = "ldap://cen.dir.go.kr:389/cn="; + String ldapUri; + if (certId.charAt(3) > '9') { + ldapUri = ",ou=Group of Server,o=Public of Korea,c=KR"; + } else { + ldapUri = ",ou=Group of Server,o=Government of Korea,c=KR"; + } + + int ret = gpki.LDAP_GetAnyDataByURL("userCertificate;binary", ldapUrl + certId + ldapUri); + this.checkResult(ret, gpki); + cert = new X509Certificate(gpki.baReturnArray); + } else { + if(certFilePath != null){ + cert = Disk.readCert(certFilePath + File.separator + certId + ".cer"); + }else{ + logger.debug("not certFilePath"); + } + } + + targetServerCertMap.put(certId, cert); + } + + private gpkiapi_jni getGPKI(){ + gpkiapi_jni gpki = new gpkiapi_jni(); + if(gpki.API_Init(gpkiLicPath) != 0){ + logger.error(gpki.sDetailErrorString); + } + return gpki; + } + private void finish(gpkiapi_jni gpki){ + if(gpki.API_Finish() != 0){ + logger.error(gpki.sDetailErrorString); + } + } + + public byte[] encrypt(byte[] plain, String certId , boolean load) throws Exception { + X509Certificate targetEnvCert = targetServerCertMap.get(certId); + if (targetEnvCert == null) { + throw new Exception("Certificate not found : targetServerId=" + certId); + } + + gpkiapi_jni gpki = this.getGPKI(); + try{ + int result = gpki.CMS_MakeEnvelopedData(targetEnvCert.getCert(), plain, + gpkiapi_jni.SYM_ALG_NEAT_CBC); + checkResult(result, "Fail to encrypt message", gpki); + + return gpki.baReturnArray; + }catch(Exception ex){ + throw ex; + }finally{ + finish(gpki); + } + } + + public byte[] encrypt(byte[] plain, String certId) throws Exception { + return encrypt(plain,certId , false); + } + + public byte[] decrypt(byte[] encrypted) throws Exception { + + gpkiapi_jni gpki = this.getGPKI(); + try{ + int result = gpki.CMS_ProcessEnvelopedData(myEnvCert, myEnvKey, + encrypted); + checkResult(result, "Fail to decrpyt message", gpki); + + return gpki.baReturnArray; + }catch(Exception ex){ + throw ex; + }finally{ + finish(gpki); + } + } + + public byte[] sign(byte[] plain) throws Exception { + + gpkiapi_jni gpki = this.getGPKI(); + try{ + int result = gpki.CMS_MakeSignedData(mySigCert, mySigKey, plain, null); + checkResult(result, "Fail to sign message", gpki); + + return gpki.baReturnArray; + }catch(Exception ex){ + throw ex; + }finally{ + finish(gpki); + } + } + + public byte[] validate(byte[] signed) throws Exception { + + gpkiapi_jni gpki = this.getGPKI(); + try{ + int result = gpki.CMS_ProcessSignedData(signed); + checkResult(result, "Fail to validate signed message", gpki); + return gpki.baData; + }catch(Exception ex){ + throw ex; + }finally{ + finish(gpki); + } + } + + public String encode(byte[] plain) throws Exception { + + gpkiapi_jni gpki = this.getGPKI(); + try{ + int result = gpki.BASE64_Encode(plain); + checkResult(result, "Fail to encode message", gpki); + + return gpki.sReturnString; + }catch(Exception ex){ + throw ex; + }finally{ + finish(gpki); + } + + } + + public byte[] decode(String base64) throws Exception { + + gpkiapi_jni gpki = this.getGPKI(); + try{ + int result = gpki.BASE64_Decode(base64); + checkResult(result, "Fail to decode base64 message", gpki); + + return gpki.baReturnArray; + }catch(Exception ex){ + throw ex; + }finally{ + finish(gpki); + } + } + + private void checkResult(int result, gpkiapi_jni gpki)throws Exception{ + this.checkResult(result, null, gpki); + } + + private void checkResult(int result ,String message, gpkiapi_jni gpki)throws Exception{ + if( 0 != result){ + if(null != gpki){ + throw new Exception(message + " : gpkiErrorMessage=" + gpki.sDetailErrorString); + }else{ + throw new Exception(message + " : gpkiErrorCode=" + result); + } + } + } + + public void testGpki(gpkiapi_jni gpki) throws Exception{ + //gpki test eng + logger.info("======================================================="); + logger.info("================ TEST GPKI START ======================"); + logger.info("======================================================="); + String original_Eng = "abc"; + logger.info("=== TEST ENG STRING: "+ original_Eng); + try { + byte[] encrypted = encrypt(original_Eng.getBytes(), myServerId); + logger.info("=== TEST ENG ENCRYPT STRING: "+ encode(encrypted)); + String decrypted = new String(decrypt(encrypted)); + logger.info("=== TEST ENG DECRYPT STRING: "+decrypted); + + if (!original_Eng.equals(decrypted)) { + throw new Exception("GpkiUtil not initialized properly(english)"); + } + logger.info("=== TEST ENG: OK"); + } catch (Exception e) { + logger.warn("Gpki Test error(english)", e); + throw e; + } + //gpki test kor + String original = "한글테스트"; + logger.info("=== TEST KOR STRING: "+ original); + try { + byte[] encrypted = encrypt(original.getBytes(), myServerId); + logger.info("=== TEST KOR ENCRYPT STRING: "+ encode(encrypted)); + String decrypted = new String(decrypt(encrypted)); + logger.info("=== TEST KOR DECRYPT STRING: "+decrypted); + if (!original.equals(decrypted)) { + throw new Exception("GpkiUtil not initialized properly(korean)"); + } + logger.info("=== TEST KOR: OK"); + } catch (Exception e) { + logger.warn("Gpki Test error(korean)", e); + throw e; + }finally{ + logger.info("======================================================="); + logger.info("================ TEST GPKI END ========================"); + logger.info("======================================================="); + } + } + + public String getMyServerId() { + return myServerId; + } + + public void setMyServerId(String myServerId) { + this.myServerId = myServerId.trim(); + } + + public String getEnvCertFilePathName() { + return envCertFilePathName; + } + + public void setEnvCertFilePathName(String envCertFilePathName) { + this.envCertFilePathName = envCertFilePathName.trim(); + } + + public String getEnvPrivateKeyFilePathName() { + return envPrivateKeyFilePathName; + } + + public void setEnvPrivateKeyFilePathName(String envPrivateKeyFilePathName) { + this.envPrivateKeyFilePathName = envPrivateKeyFilePathName.trim(); + } + + public String getEnvPrivateKeyPasswd() { + return envPrivateKeyPasswd; + } + + public void setEnvPrivateKeyPasswd(String envPrivateKeyPasswd) { + this.envPrivateKeyPasswd = envPrivateKeyPasswd.trim(); + } + + public String getSigPrivateKeyPasswd() { + return sigPrivateKeyPasswd; + } + + public void setSigPrivateKeyPasswd(String sigPrivateKeyPasswd) { + this.sigPrivateKeyPasswd = sigPrivateKeyPasswd.trim(); + } + + public String getSigCertFilePathName() { + return sigCertFilePathName; + } + + public void setSigCertFilePathName(String sigCertFilePathName) { + this.sigCertFilePathName = sigCertFilePathName.trim(); + } + + public String getSigPrivateKeyFilePathName() { + return sigPrivateKeyFilePathName; + } + + public void setSigPrivateKeyFilePathName(String sigPrivateKeyFilePathName) { + this.sigPrivateKeyFilePathName = sigPrivateKeyFilePathName.trim(); + } + + public boolean getIsLDAP() { + return isLDAP; + } + + public void setIsLDAP(boolean isLDAP) { + this.isLDAP = isLDAP; + } + + public String getCertFilePath() { + return certFilePath; + } + + public void setCertFilePath(String certFilePath) { + this.certFilePath = certFilePath.trim(); + } + + public String getTargetServerIdList() { + return targetServerIdList; + } + + public void setTargetServerIdList(String targetServerIdList) { + this.targetServerIdList = targetServerIdList; + } + + public String getGpkiLicPath() { + return gpkiLicPath; + } + + public void setGpkiLicPath(String gpkiLicPath) { + this.gpkiLicPath = gpkiLicPath; + } + + public boolean getTestGPKI() { + return testGPKI; + } + + public void setTestGPKI(boolean testGPKI) { + this.testGPKI = testGPKI; + } + +} diff --git a/src/main/java/egovframework/itgcms/util/SftpUtil.java b/src/main/java/egovframework/itgcms/util/SftpUtil.java new file mode 100644 index 0000000..2db92d0 --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/SftpUtil.java @@ -0,0 +1,111 @@ +package egovframework.itgcms.util; + +import java.io.File; +import java.io.FileInputStream; + +import com.jcraft.jsch.Channel; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.Session; +import com.jcraft.jsch.SftpATTRS; + +import egovframework.com.ext.jfile.GlobalVariables; +import egovframework.com.ext.jfile.JProperties; + +public class SftpUtil { + private Session session = null; + private Channel channel = null; + private ChannelSftp channelSftp = null; + + public void init(String host, String userName, String password, int port) throws JSchException{ + JSch jsch = new JSch(); + try{ + session = jsch.getSession(userName,host,port); + session.setPassword(password); + + session.setConfig("StrictHostKeyChecking", "no"); + session.connect(); + + channel = session.openChannel("sftp"); + channel.connect(); + channelSftp = (ChannelSftp) channel; + + }catch(JSchException e){ + e.printStackTrace(); +// System.out.println("접속 실패"); + } + + + } + + public void disconnect() { + if(session.isConnected()){ + + channelSftp.disconnect(); + channel.disconnect(); + session.disconnect(); +// System.out.println("접속 해제"); + } + } + + public void upload(String fileName, String remoteDir) throws Exception { + FileInputStream fis = null; + // 접속 초기화 + init(JProperties.getString(GlobalVariables.SFTP_SERVER_IP),JProperties.getString(GlobalVariables.SFTP_USER_ID),JProperties.getString(GlobalVariables.SFTP_USER_PASSWORD),Integer.parseInt(JProperties.getString(GlobalVariables.SFTP_SERVER_PORT))); + + try { + //유닉스 경로 처리 + String[] dirs = remoteDir.replaceAll("\\\\", "/").split("/"); + + if(dirs != null && dirs.length>0){ + + SftpATTRS attrs = null; + int idx = 0; + String pathInfo = ""; + + for(String folder : dirs){ + if(idx != 0){ + if(idx == 1){ + pathInfo = "/"+folder; + } + else{ + pathInfo = pathInfo + "/"+folder; + } + + try{ + attrs = channelSftp.stat(pathInfo); + } + catch(Exception e){ +// System.out.println("'"+folder+"' 가 없습니다."); + } + + if(attrs != null){ +// System.out.println("디렉토리 존재여부 : "+ attrs.isDir()); + + } + else{ + channelSftp.mkdir(pathInfo); + } + + } + idx++; + attrs = null; + } + channelSftp.cd(pathInfo); + } + + File file = new File(fileName); + fis = new FileInputStream(file); + channelSftp.put(fis, file.getName()); + fis.close(); + +// System.out.println("다음위치의 파일이 전송 완료됨 - "+ file.getAbsolutePath()); + + } catch (Exception e) { + e.printStackTrace(); +// System.out.println("예외 발생 : "+e); + } + disconnect(); + } +} diff --git a/src/main/java/egovframework/itgcms/util/ShareGpki.java b/src/main/java/egovframework/itgcms/util/ShareGpki.java new file mode 100644 index 0000000..de2bfa1 --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/ShareGpki.java @@ -0,0 +1,53 @@ +package egovframework.itgcms.util; + +public class ShareGpki { + + public ShareGpki(){ + + } + public static NewGpkiUtil getGpkiUtil(String targetServerId)throws Exception{ + NewGpkiUtil g = new NewGpkiUtil(); + // 이용기관 서버CN + //인증서 아이디 + String myServerId = "SVRB553881003"; + + // 이용기관 서버인증서 경로 + //연계서버에 모듈 설치 후 cert파일 올리고난 다음 디렉토리 설정 + g.setCertFilePath("/export/home/meta/ais/gpki_client/gpkiapiJava_v1.5.1.0/certs"); + + String envCertFilePathName = "/export/home/meta/ais/gpki_client/gpkiapiJava_v1.5.1.0/certs/SVRB553881003_env.cer"; + String envPrivateKeyFilePathName = "/export/home/meta/ais/gpki_client/gpkiapiJava_v1.5.1.0/certs/SVRB553881003_env.key"; + + // 이용기관 서버인증서 비밀번호 + String envPrivateKeyPasswd = "Car365!7505"; + + // 이용기관 서버전자서명 경로 + String sigCertFilePathName = "/export/home/meta/ais/gpki_client/gpkiapiJava_v1.5.1.0/certs/SVRB553881003_sig.cer"; + String sigPrivateKeyFilePathName = "/export/home/meta/ais/gpki_client/gpkiapiJava_v1.5.1.0/certs/SVRB553881003_sig.key"; + + // 이용기관 서버전자서명 비밀번호 + String sigPrivateKeyPasswd = "Car365!7505"; + + + // 이용기관 GPKI API 라이선스파일 경로 + //모듈 폴더를 서버에 풀었을 떄 해당 경로 설정 + g.setGpkiLicPath("/export/home/meta/ais/gpki_client/gpkiapiJava_v1.5.1.0/gpkiapiJava_v1.5.1.0_SunOS_5.8_sun4u_32bit_20170501/conf"); + + g.setEnvCertFilePathName(envCertFilePathName); + g.setEnvPrivateKeyFilePathName(envPrivateKeyFilePathName); + g.setEnvPrivateKeyPasswd(envPrivateKeyPasswd); + // LDAP 의 사용유무 + // 미사용일 경우 암호화할 타겟의 인증서를 파일로 저장해놓고 사용하여야함. + g.setIsLDAP(true); + g.setMyServerId(myServerId); + g.setSigCertFilePathName(sigCertFilePathName); + g.setSigPrivateKeyFilePathName(sigPrivateKeyFilePathName); + g.setSigPrivateKeyPasswd(sigPrivateKeyPasswd); + + g.setTargetServerIdList(targetServerId); + + g.init(); + + return g; + } +} diff --git a/src/main/java/egovframework/itgcms/util/UserPaginationRenderer.java b/src/main/java/egovframework/itgcms/util/UserPaginationRenderer.java new file mode 100644 index 0000000..b073e65 --- /dev/null +++ b/src/main/java/egovframework/itgcms/util/UserPaginationRenderer.java @@ -0,0 +1,88 @@ +package egovframework.itgcms.util; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.AbstractPaginationRenderer; + +import javax.servlet.ServletContext; + +import org.springframework.web.context.ServletContextAware; +/** + * ImagePaginationRenderer.java 클래스 + * + * @author 서준식 + * @since 2011. 9. 16. + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    -------------    ----------------------
    + *   2011. 9. 16.   서준식       이미지 경로에 ContextPath추가
    + * 
    + */ +public class UserPaginationRenderer extends AbstractPaginationRenderer implements ServletContextAware{ + + private ServletContext servletContext; + + String type ; + + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public UserPaginationRenderer() { + // no-op + } + + public void initVariables(){ + String strWebDir = "/resource/common/img/common/"; + 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(); + } + +}