관리자 분리 중
This commit is contained in:
parent
b5ae1fb155
commit
020fb6a4db
52
pom.xml
52
pom.xml
@ -8,33 +8,6 @@
|
||||
<name>mjon</name>
|
||||
<url>http://www.egovframe.go.kr</url>
|
||||
|
||||
<!-- <profiles>
|
||||
<profile>
|
||||
<id>local</id>
|
||||
<activation>
|
||||
<activeByDefault>true</activeByDefault> activeByDefault 기본
|
||||
</activation>
|
||||
<properties>
|
||||
resource 필터 사용시 개발자 PC에 적용되는 필터 properties 의 폴더 위치
|
||||
<env>local</env>
|
||||
</properties>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>dev</id>
|
||||
<properties>
|
||||
resource 필터 사용시 개발자 PC에 적용되는 필터 properties 의 폴더 위치
|
||||
<env>dev</env>
|
||||
</properties>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>real</id>
|
||||
<properties>
|
||||
resource 필터 사용시 개발자 PC에 적용되는 필터 properties 의 폴더 위치
|
||||
<env>real</env>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles> -->
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
@ -54,28 +27,8 @@
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>mvn2</id>
|
||||
<url>https://repo1.maven.org/maven2/</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>egovframe</id>
|
||||
<url>https://www.egovframe.go.kr/maven/</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>egovframe2</id>
|
||||
<url>http://maven.egovframe.kr:8080/maven/</url>
|
||||
<id>maven-public</id>
|
||||
<url>http://nexus.iten.co.kr:9999/repository/maven-public/</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
@ -568,7 +521,6 @@
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- Komoran 형태소 분석기 -->
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@ -1,106 +0,0 @@
|
||||
package itn.com.cmm;
|
||||
|
||||
/*
|
||||
* Copyright 2002-2005 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.jdbc.support.lob.LobCreator;
|
||||
import org.springframework.jdbc.support.lob.LobHandler;
|
||||
import egovframework.rte.psl.orm.ibatis.support.AbstractLobTypeHandler;
|
||||
|
||||
/**
|
||||
* iBATIS TypeHandler implementation for Strings that get mapped to CLOBs.
|
||||
* Retrieves the LobHandler to use from SqlMapClientFactoryBean at config time.
|
||||
*
|
||||
* <p>Particularly useful for storing Strings with more than 4000 characters in an
|
||||
* Oracle database (only possible via CLOBs), in combination with OracleLobHandler.
|
||||
*
|
||||
* <p>Can also be defined in generic iBATIS mappings, as DefaultLobCreator will
|
||||
* work with most JDBC-compliant database drivers. In this case, the field type
|
||||
* does not have to be BLOB: For databases like MySQL and MS SQL Server, any
|
||||
* large enough binary type will work.
|
||||
*
|
||||
* @author Juergen Hoeller
|
||||
* @since 1.1.5
|
||||
* @see org.springframework.orm.ibatis.SqlMapClientFactoryBean#setLobHandler
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public class AltibaseClobStringTypeHandler extends AbstractLobTypeHandler {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(AltibaseClobStringTypeHandler.class);
|
||||
|
||||
/**
|
||||
* Constructor used by iBATIS: fetches config-time LobHandler from
|
||||
* SqlMapClientFactoryBean.
|
||||
* @see org.springframework.orm.ibatis.SqlMapClientFactoryBean#getConfigTimeLobHandler
|
||||
*/
|
||||
public AltibaseClobStringTypeHandler() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor used for testing: takes an explicit LobHandler.
|
||||
*/
|
||||
protected AltibaseClobStringTypeHandler(LobHandler lobHandler) {
|
||||
super(lobHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setParameterInternal(PreparedStatement ps, int index, Object value, String jdbcType, LobCreator lobCreator) throws SQLException {
|
||||
lobCreator.setClobAsString(ps, index, (String) value);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object getResultInternal(ResultSet rs, int index, LobHandler lobHandler) throws SQLException {
|
||||
|
||||
StringBuffer read_data = new StringBuffer("");
|
||||
int read_length;
|
||||
|
||||
char[] buf = new char[1024];
|
||||
|
||||
Reader rd = lobHandler.getClobAsCharacterStream(rs, index);
|
||||
try {
|
||||
while ((read_length = rd.read(buf)) != -1) {
|
||||
read_data.append(buf, 0, read_length);
|
||||
}
|
||||
} catch (IOException ie) {
|
||||
LOGGER.debug("ie: {}", ie);
|
||||
} finally {
|
||||
if (rd != null) {
|
||||
try {
|
||||
rd.close();
|
||||
} catch (Exception ignore) {
|
||||
LOGGER.debug("IGNORE: {}", ignore.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return read_data.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object valueOf(String s) {
|
||||
return s;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,46 +0,0 @@
|
||||
/*
|
||||
* Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package itn.com.cmm.filter;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.Filter;
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.FilterConfig;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
public class HTMLTagFilter implements Filter{
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private FilterConfig config;
|
||||
|
||||
public void doFilter(ServletRequest request, ServletResponse response,
|
||||
FilterChain chain) throws IOException, ServletException {
|
||||
|
||||
chain.doFilter(new HTMLTagFilterRequestWrapper((HttpServletRequest)request), response);
|
||||
}
|
||||
|
||||
public void init(FilterConfig config) throws ServletException {
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,109 +0,0 @@
|
||||
/*
|
||||
* Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package itn.com.cmm.filter;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletRequestWrapper;
|
||||
|
||||
public class HTMLTagFilterRequestWrapper extends HttpServletRequestWrapper {
|
||||
|
||||
public HTMLTagFilterRequestWrapper(HttpServletRequest request) {
|
||||
super(request);
|
||||
}
|
||||
|
||||
public String[] getParameterValues(String parameter) {
|
||||
|
||||
String[] values = super.getParameterValues(parameter);
|
||||
|
||||
if(values==null){
|
||||
return null;
|
||||
}
|
||||
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
if (values[i] != null) {
|
||||
StringBuffer strBuff = new StringBuffer();
|
||||
for (int j = 0; j < values[i].length(); j++) {
|
||||
char c = values[i].charAt(j);
|
||||
switch (c) {
|
||||
case '<':
|
||||
strBuff.append("<");
|
||||
break;
|
||||
case '>':
|
||||
strBuff.append(">");
|
||||
break;
|
||||
//case '&':
|
||||
//strBuff.append("&");
|
||||
//break;
|
||||
case '"':
|
||||
strBuff.append(""");
|
||||
break;
|
||||
case '\'':
|
||||
strBuff.append("'");
|
||||
break;
|
||||
default:
|
||||
strBuff.append(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
values[i] = strBuff.toString();
|
||||
} else {
|
||||
values[i] = null;
|
||||
}
|
||||
}
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
public String getParameter(String parameter) {
|
||||
|
||||
String value = super.getParameter(parameter);
|
||||
|
||||
if(value==null){
|
||||
return null;
|
||||
}
|
||||
|
||||
StringBuffer strBuff = new StringBuffer();
|
||||
|
||||
for (int i = 0; i < value.length(); i++) {
|
||||
char c = value.charAt(i);
|
||||
switch (c) {
|
||||
case '<':
|
||||
strBuff.append("<");
|
||||
break;
|
||||
case '>':
|
||||
strBuff.append(">");
|
||||
break;
|
||||
case '&':
|
||||
strBuff.append("&");
|
||||
break;
|
||||
case '"':
|
||||
strBuff.append(""");
|
||||
break;
|
||||
case '\'':
|
||||
strBuff.append("'");
|
||||
break;
|
||||
default:
|
||||
strBuff.append(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
value = strBuff.toString();
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,97 +0,0 @@
|
||||
package itn.com.cmm.interceptor.ipCheck;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
|
||||
import net.sf.cglib.core.Constants;
|
||||
|
||||
@Component
|
||||
public class IPCheckInterceptor implements HandlerInterceptor, Constants {
|
||||
|
||||
@Autowired
|
||||
private WSOpenAPIService WSService;
|
||||
|
||||
private String LOCAL_HOST ="127.0.0.1";
|
||||
|
||||
private String WHO_IS_COUNTRY_CODE ="countryCode";
|
||||
|
||||
private String KOREA_COUNTRY_CODE ="KR";
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
|
||||
throws Exception {
|
||||
String clientIp = request.getHeader("X-Forwarded-For") == null ? request.getHeader("X-Forwarded-For") : request.getHeader("X-Forwarded-For").replaceAll("10.12.107.11", "").replaceAll(",", "").trim();
|
||||
if (ObjectUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
|
||||
clientIp = request.getHeader("Proxy-Client-IP");
|
||||
}
|
||||
if (ObjectUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
|
||||
clientIp = request.getHeader("WL-Proxy-Client-IP");
|
||||
}
|
||||
if (ObjectUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
|
||||
clientIp = request.getHeader("HTTP_CLIENT_IP");
|
||||
}
|
||||
if (ObjectUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
|
||||
clientIp = request.getHeader("HTTP_X_FORWARDED_FOR");
|
||||
}
|
||||
if (ObjectUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
|
||||
clientIp = request.getRemoteAddr();
|
||||
}
|
||||
|
||||
//로컬 테스트 시 주석 해제해주세요. 미국 IP입니다.
|
||||
// clientIp = "54.211.120.28";
|
||||
|
||||
// clientIp = "219.240.88.15";
|
||||
|
||||
|
||||
if(!LOCAL_HOST.equals(clientIp)) {
|
||||
Map<String,String> clientInfo = WSService.getClientInfoByIPAddress(clientIp);
|
||||
|
||||
if(clientInfo == null) {
|
||||
logger.error("IP에 대한 클라이언트 정보 조회에 실패하였습니다.");
|
||||
response.sendRedirect(request.getContextPath() + "/");
|
||||
return false;
|
||||
}
|
||||
|
||||
String country = clientInfo.get(WHO_IS_COUNTRY_CODE);
|
||||
|
||||
if(!KOREA_COUNTRY_CODE.equals(country)) {
|
||||
logger.error("해외 IP가 감지되었습니다. 접근을 차단합니다. IP : {}, Country : {}", clientIp, country);
|
||||
response.setContentType("text/html; charset=UTF-8");
|
||||
PrintWriter out = response.getWriter();
|
||||
out.println("<script>alert('해외 IP가 감지되었습니다. 로그인 접근을 차단 합니다.'); location.href='/web/main/mainPage.do';</script>");
|
||||
out.flush();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
|
||||
ModelAndView modelAndView) throws Exception {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
|
||||
throws Exception {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,82 +0,0 @@
|
||||
package itn.com.cmm.interceptor.ipCheck;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.http.client.config.RequestConfig;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import net.sf.cglib.core.Constants;
|
||||
|
||||
@Service("WSOpenAPIService")
|
||||
public class WSOpenAPIService implements Constants{
|
||||
|
||||
@Value("${whois.api.key}")
|
||||
private String apiKey;
|
||||
|
||||
@Value("${whois.api.url}")
|
||||
private String apiUrl;
|
||||
|
||||
private String WHO_IS = "whois";
|
||||
|
||||
@Autowired
|
||||
private CloseableHttpClient closeableHttpClient;
|
||||
|
||||
@Autowired
|
||||
private RequestConfig requestConfig;
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public Map<String,String> getClientInfoByIPAddress(String ip) throws Exception{
|
||||
|
||||
StringBuilder urlBuilder = new StringBuilder(apiUrl); /*URL*/
|
||||
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "="+URLEncoder.encode(apiKey, "UTF-8")); /*Service Key*/
|
||||
urlBuilder.append("&" + URLEncoder.encode("query","UTF-8") + "=" + URLEncoder.encode(ip, "UTF-8")); /*IP 주소 또는 AS 번호*/
|
||||
urlBuilder.append("&" + URLEncoder.encode("answer","UTF-8") + "=" + URLEncoder.encode("JSON", "UTF-8")); /*응답형식(XML/JSON) 을 지정(없으면 XML으로 응답)*/
|
||||
URL url = new URL(urlBuilder.toString());
|
||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||
conn.setRequestMethod("GET");
|
||||
conn.setRequestProperty("Content-type", "application/json");
|
||||
System.out.println("Response code: " + conn.getResponseCode());
|
||||
BufferedReader rd;
|
||||
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
|
||||
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
||||
} else {
|
||||
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
|
||||
}
|
||||
String result = "";
|
||||
String line;
|
||||
while ((line = rd.readLine()) != null) {
|
||||
result = result + line.trim();// result = URL로 XML을 읽은 값
|
||||
}
|
||||
rd.close();
|
||||
conn.disconnect();
|
||||
System.out.println(result);
|
||||
|
||||
JSONParser jsonParser = new JSONParser();
|
||||
JSONObject jsonObj = (JSONObject) jsonParser.parse(result);
|
||||
JSONObject inf = (JSONObject) jsonObj.get("response");
|
||||
JSONObject info1 = (JSONObject) inf.get("result");
|
||||
JSONObject info2 = (JSONObject) inf.get("whois");
|
||||
|
||||
Map<String, String> workplace = (Map<String, String>) inf.get("whois");
|
||||
|
||||
|
||||
return workplace;
|
||||
}
|
||||
}
|
||||
@ -1,369 +0,0 @@
|
||||
package itn.com.cmm.util;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.lang.builder.ToStringBuilder;
|
||||
|
||||
/**
|
||||
* 프로그램 파일명 : Criteria.java
|
||||
*
|
||||
* 프로그램 설명 : 검색용 객체
|
||||
*
|
||||
* 작 성 자 : jeong hoon hee
|
||||
*
|
||||
* 작 성 일 : 2013. 12. 02.
|
||||
*
|
||||
* Copyright(c) 2013 DAEYOON Co. Ltd. All rights reserved.
|
||||
*/
|
||||
public class Criteria implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 검색용 맵 객체
|
||||
*/
|
||||
private Map<String, Object> condition = new HashMap<String, Object>();
|
||||
|
||||
/**
|
||||
* getParams() 메소드에서 append 할지여부의 condition맵
|
||||
*/
|
||||
private Map<String, Boolean> paramViewMap = new HashMap<String, Boolean>();
|
||||
|
||||
/**
|
||||
* 정렬용 리스트 객체
|
||||
*/
|
||||
private List<Order> orderList = new ArrayList<Order>();
|
||||
|
||||
/** 검색조건 */
|
||||
private String searchCondition = "";
|
||||
|
||||
/** 검색Keyword */
|
||||
private String searchKeyword = "";
|
||||
|
||||
/** 검색사용여부 */
|
||||
private String searchUseYn = "";
|
||||
|
||||
/** 현재페이지 */
|
||||
private int pageIndex = 1;
|
||||
|
||||
/** 페이지갯수 */
|
||||
private int pageUnit = 10;
|
||||
|
||||
/** 페이지사이즈 */
|
||||
private int pageSize = 10;
|
||||
|
||||
/** firstIndex */
|
||||
private int firstIndex = 1;
|
||||
|
||||
/** lastIndex */
|
||||
private int lastIndex = 1;
|
||||
|
||||
/** recordCountPerPage */
|
||||
private int recordCountPerPage = 10;
|
||||
|
||||
/** 검색KeywordFrom */
|
||||
private String searchKeywordFrom = "";
|
||||
|
||||
/** 검색KeywordTo */
|
||||
private String searchKeywordTo = "";
|
||||
|
||||
/** 메뉴번호 */
|
||||
private Integer menuNo;
|
||||
|
||||
/**
|
||||
* 기본생성자
|
||||
*/
|
||||
public Criteria() {
|
||||
}
|
||||
|
||||
/**
|
||||
* request객체에서 넘어오는 검색파라미터를 셋팅한다. (* condition 맵처리)
|
||||
*
|
||||
* @param request
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public Criteria(HttpServletRequest request) {
|
||||
|
||||
Set<String> set = request.getParameterMap().keySet();
|
||||
Iterator<String> iter = set.iterator();
|
||||
while (iter.hasNext()) {
|
||||
String key = iter.next();
|
||||
if (key.equals("pageUnit")) {
|
||||
try {
|
||||
pageUnit = Integer.parseInt(request.getParameter(key));
|
||||
|
||||
this.condition.put("pageUnit", pageUnit);
|
||||
this.paramViewMap.put("pageUnit", true);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
} else if (key.equals("pageSize")) {
|
||||
try {
|
||||
pageSize = Integer.parseInt(request.getParameter(key));
|
||||
|
||||
this.condition.put("pageSize", pageSize);
|
||||
this.paramViewMap.put("pageSize", true);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
} else if (key.equals("pageIndex")) {
|
||||
try {
|
||||
pageIndex = Integer.parseInt(request.getParameter(key));
|
||||
|
||||
this.condition.put("pageIndex", pageIndex);
|
||||
this.paramViewMap.put("pageIndex", true);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
} else if (key.equals("searchCondition")) {
|
||||
try {
|
||||
searchCondition = request.getParameter(key);
|
||||
|
||||
this.condition.put("searchCondition", searchCondition);
|
||||
this.paramViewMap.put("searchCondition", true);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
} else if (key.equals("searchKeyword")) {
|
||||
try {
|
||||
searchKeyword = request.getParameter(key);
|
||||
|
||||
this.condition.put("searchKeyword", searchKeyword);
|
||||
this.paramViewMap.put("searchKeyword", true);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
} else if (key.equals("menuNo")) {
|
||||
try {
|
||||
menuNo = Integer.parseInt(request.getParameter(key));
|
||||
|
||||
this.condition.put("menuNo", menuNo);
|
||||
this.paramViewMap.put("menuNo", true);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
} else if (key.startsWith("condition.")) {
|
||||
String conditionKey = StringUtils.substringAfter(key, "condition.");
|
||||
String conditionValue = request.getParameter(key);
|
||||
if (StringUtils.isNotEmpty(conditionValue)) {
|
||||
this.condition.put(conditionKey, conditionValue);
|
||||
this.paramViewMap.put(conditionKey, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, Object> getCondition() {
|
||||
return condition;
|
||||
}
|
||||
|
||||
public void setCondition(Map<String, Object> condition) {
|
||||
this.condition = condition;
|
||||
}
|
||||
|
||||
public Object remove(Object key) {
|
||||
return this.condition.remove(key);
|
||||
}
|
||||
|
||||
public Object get(String key) {
|
||||
return this.condition.get(key);
|
||||
}
|
||||
|
||||
public Object put(String key, Object value) {
|
||||
this.paramViewMap.put(key, true);
|
||||
return this.condition.put(key, value);
|
||||
}
|
||||
|
||||
public Object put(String key, Object value, boolean append) {
|
||||
this.paramViewMap.put(key, append);
|
||||
return this.condition.put(key, value);
|
||||
}
|
||||
|
||||
public List<Order> getOrderList() {
|
||||
return orderList;
|
||||
}
|
||||
|
||||
public void setOrderList(List<Order> orderList) {
|
||||
this.orderList = orderList;
|
||||
}
|
||||
|
||||
public void addOrder(Order order) {
|
||||
this.orderList.add(order);
|
||||
}
|
||||
|
||||
public String getSearchCondition() {
|
||||
return searchCondition;
|
||||
}
|
||||
|
||||
public void setSearchCondition(String searchCondition) {
|
||||
this.searchCondition = searchCondition;
|
||||
}
|
||||
|
||||
public String getSearchKeyword() {
|
||||
return searchKeyword;
|
||||
}
|
||||
|
||||
public void setSearchKeyword(String searchKeyword) {
|
||||
this.searchKeyword = searchKeyword;
|
||||
}
|
||||
|
||||
public Integer getMenuNo() {
|
||||
return menuNo;
|
||||
}
|
||||
|
||||
public void setMenuNo(Integer menuNo) {
|
||||
this.menuNo = menuNo;
|
||||
}
|
||||
|
||||
public String getSearchUseYn() {
|
||||
return searchUseYn;
|
||||
}
|
||||
|
||||
public void setSearchUseYn(String searchUseYn) {
|
||||
this.searchUseYn = searchUseYn;
|
||||
}
|
||||
|
||||
public int getPageIndex() {
|
||||
return pageIndex;
|
||||
}
|
||||
|
||||
public void setPageIndex(int pageIndex) {
|
||||
this.pageIndex = pageIndex;
|
||||
condition.put("pageIndex", pageIndex);
|
||||
}
|
||||
|
||||
public int getPageUnit() {
|
||||
return pageUnit;
|
||||
}
|
||||
|
||||
public void setPageUnit(int pageUnit) {
|
||||
this.pageUnit = pageUnit;
|
||||
condition.put("pageUnit", pageUnit);
|
||||
}
|
||||
|
||||
public int getPageSize() {
|
||||
return pageSize;
|
||||
}
|
||||
|
||||
public void setPageSize(int pageSize) {
|
||||
this.pageSize = pageSize;
|
||||
condition.put("pageSize", pageSize);
|
||||
}
|
||||
|
||||
public int getFirstIndex() {
|
||||
return firstIndex;
|
||||
}
|
||||
|
||||
public void setFirstIndex(int firstIndex) {
|
||||
this.firstIndex = firstIndex;
|
||||
condition.put("firstIndex", firstIndex);
|
||||
}
|
||||
|
||||
public int getLastIndex() {
|
||||
return lastIndex;
|
||||
}
|
||||
|
||||
public void setLastIndex(int lastIndex) {
|
||||
this.lastIndex = lastIndex;
|
||||
condition.put("lastIndex", lastIndex);
|
||||
}
|
||||
|
||||
public int getRecordCountPerPage() {
|
||||
return recordCountPerPage;
|
||||
}
|
||||
|
||||
public void setRecordCountPerPage(int recordCountPerPage) {
|
||||
this.recordCountPerPage = recordCountPerPage;
|
||||
condition.put("recordCountPerPage", recordCountPerPage);
|
||||
}
|
||||
|
||||
public String getSearchKeywordFrom() {
|
||||
return searchKeywordFrom;
|
||||
}
|
||||
|
||||
public void setSearchKeywordFrom(String searchKeywordFrom) {
|
||||
this.searchKeywordFrom = searchKeywordFrom;
|
||||
}
|
||||
|
||||
public String getSearchKeywordTo() {
|
||||
return searchKeywordTo;
|
||||
}
|
||||
|
||||
public void setSearchKeywordTo(String searchKeywordTo) {
|
||||
this.searchKeywordTo = searchKeywordTo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 검색파라미터 문자열을 리턴한다.
|
||||
* @return
|
||||
*/
|
||||
public String getParams() {
|
||||
return getParams(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 검색파라미터 문자열을 리턴한다.
|
||||
* @param appendPageIndex-pageindex를 붙힐지말지여부
|
||||
* @return
|
||||
*/
|
||||
public String getParams(boolean appendPageIndex) {
|
||||
StringBuffer parameterString = new StringBuffer();
|
||||
if (appendPageIndex) {
|
||||
parameterString.append("pageIndex=");
|
||||
parameterString.append(this.pageIndex);
|
||||
parameterString.append("&");
|
||||
}
|
||||
parameterString.append("pageUnit=");
|
||||
parameterString.append(this.pageUnit);
|
||||
parameterString.append("&pageSize=");
|
||||
parameterString.append(this.pageSize);
|
||||
parameterString.append("&searchCondition=");
|
||||
parameterString.append(StringUtils.defaultString(this.searchCondition));
|
||||
parameterString.append("&searchKeyword=");
|
||||
try {
|
||||
parameterString.append(URLEncoder.encode(StringUtils.defaultString(this.searchKeyword), "UTF-8"));
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
System.out.println("UnsupportedEncodingException By Criteria.getParams() [searchValue] : " + e.getMessage());
|
||||
}
|
||||
parameterString.append("&menuNo=");
|
||||
parameterString.append((this.menuNo != null) ? this.menuNo : "");
|
||||
if (this.condition.size() > 0) {
|
||||
Set<String> set = this.condition.keySet();
|
||||
Iterator<String> iter = set.iterator();
|
||||
while (iter.hasNext()) {
|
||||
String key = iter.next();
|
||||
Object value = this.condition.get(key);
|
||||
Boolean append = this.paramViewMap.get(key)!=null?this.paramViewMap.get(key):true;
|
||||
if (append) {
|
||||
parameterString.append("&condition.");
|
||||
parameterString.append(key);
|
||||
parameterString.append("=");
|
||||
if (value instanceof String) {
|
||||
if (StringUtils.isNotEmpty((String) value)) {
|
||||
try {
|
||||
parameterString.append(URLEncoder.encode((String) value, "UTF-8"));
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
System.out.println("UnsupportedEncodingException By Criteria.getParams() [condition] : " + e.getMessage());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
parameterString.append(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return parameterString.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return ToStringBuilder.reflectionToString(this);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,67 +0,0 @@
|
||||
package itn.com.cmm.util;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import net.sf.jxls.exception.ParsePropertyException;
|
||||
import net.sf.jxls.transformer.XLSTransformer;
|
||||
|
||||
public class ExcelDownloadUtil {
|
||||
private static final Logger logger = LoggerFactory.getLogger(ExcelDownloadUtil.class);
|
||||
|
||||
|
||||
/**
|
||||
* 엑셀 다운로드<br>
|
||||
* - jxl 사용 : 템플릿 xlsx 필요<br>
|
||||
* @param request
|
||||
* @param response
|
||||
* @param mapData : 바인딩 데이터 맵
|
||||
* @param saveFilename : 빈 값 또는 null일 경우 yyyy-MM-dd_HHmm.xlsx
|
||||
* @param templateFileName : /excels 디렉토리 내 엑셀 템플릿 파일명
|
||||
*/
|
||||
public static void downloadExcel(HttpServletRequest request, HttpServletResponse response, Map<String, Object> mapData, String saveFilename, String templateFileName) {
|
||||
|
||||
String sTemplatePath = request.getSession().getServletContext().getRealPath("/excels");
|
||||
InputStream is = null;
|
||||
OutputStream os = null;
|
||||
try {
|
||||
is = new BufferedInputStream(new FileInputStream(sTemplatePath + "/" + templateFileName));
|
||||
|
||||
XLSTransformer transformer = new XLSTransformer();
|
||||
Workbook resultWorkbook = transformer.transformXLS(is, mapData);
|
||||
|
||||
if (StringUtil.isEmpty(saveFilename))
|
||||
saveFilename = StringUtil.getDateToString("yyyy-MM-dd_HHmm");
|
||||
|
||||
response.setContentType("application/vnd.ms-excel");
|
||||
response.setHeader("Content-Disposition", "attachment; filename=\"" + saveFilename + ".xlsx\"");
|
||||
|
||||
os = response.getOutputStream();
|
||||
resultWorkbook.write(os);
|
||||
|
||||
os.flush();
|
||||
os.close();
|
||||
is.close();
|
||||
}
|
||||
catch (ParsePropertyException | IOException | org.apache.poi.openxml4j.exceptions.InvalidFormatException e) {
|
||||
logger.error("MakeExcel Exception : {}", e.getMessage(), e);
|
||||
}
|
||||
finally {
|
||||
if (os != null)
|
||||
os = null;
|
||||
if (is != null)
|
||||
is = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,646 +0,0 @@
|
||||
package itn.com.cmm.util;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.usermodel.DateUtil;
|
||||
import org.apache.poi.ss.usermodel.FormulaEvaluator;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.ss.usermodel.WorkbookFactory;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||
|
||||
import itn.com.cmm.service.EgovProperties;
|
||||
|
||||
public class ExcelUploadUtil {
|
||||
private static final Logger logger = LoggerFactory.getLogger(ExcelUploadUtil.class);
|
||||
|
||||
/**
|
||||
* 업로드 엑셀 읽기 - 파일 한 개만 지원<br>
|
||||
* - 엑셀 파일의 첫 번째 레코드를 HasMap 키 이름으로 사용 - 엑셀 파일의 두 번째 레코드부터 데이터로 저장<br>
|
||||
* @param request
|
||||
* @param uploadFolder
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static List<HashMap<String, String>> readExcel(MultipartHttpServletRequest request, String uploadFolder) throws Exception {
|
||||
return readExcel(request, uploadFolder, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 엑셀 읽기 - 파일 한 개만 지원, 첫 번째 시트만 처리<br><br>
|
||||
* - 지정한 배열로 HashMap key name 적용<br>
|
||||
* - 엑셀 파일의 첫 번째 레코드부터 데이터로 저장<br>
|
||||
* @param request
|
||||
* @param uploadFolder
|
||||
* @param columnNames null일 경우 엑셀 첫 레코드를 컬럼 이름으로 사용
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static List<HashMap<String, String>> readExcel(MultipartHttpServletRequest request, String uploadFolder, String[] columnNames) throws Exception {
|
||||
return readExcel(request, uploadFolder, columnNames, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 엑셀 읽기 - 파일 한 개만 지원, 첫 번째 시트만 처리<br><br>
|
||||
*
|
||||
* @param request
|
||||
* @param uploadFolder : 서브 디렉토리 : 빈 값 =/uploadRoot/com/[yyyyMMdd]/, 값이 있으면=/uploadRoot/[uploadFolder]
|
||||
* @param columnNames : HasMap key name : null일 경우 엑셀 첫 레코드를 컬럼 이름으로 사용
|
||||
* @param startRecord : 데이터를 가져올 시작 레코드 : 첫 레코드 = 1
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static List<HashMap<String, String>> readExcel(MultipartHttpServletRequest request, String uploadFolder, String[] columnNames, int startRecord) throws Exception {
|
||||
|
||||
MultiValueMap<String, MultipartFile> files = request.getMultiFileMap();
|
||||
|
||||
//String sUploadPathProperty = "upload.path.physical." + EgovProperties.getProperty("globals.web.mode");
|
||||
String sUploadPathProperty = "/temp";
|
||||
String sSubDir = uploadFolder;
|
||||
|
||||
if (StringUtil.isEmpty(sSubDir)) {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM", Locale.getDefault());
|
||||
//sSubDir = EgovProperties.getProperty("upload.path.common") + "/" + sdf.format(new Date()) + "/";
|
||||
sSubDir = "/test";
|
||||
|
||||
}
|
||||
//File uploadPath = new File(EgovProperties.getProperty(sUploadPathProperty), sSubDir);
|
||||
|
||||
File uploadPath = new File("/usr", "temp");
|
||||
|
||||
if (!uploadPath.exists())
|
||||
uploadPath.mkdirs();
|
||||
|
||||
List<HashMap<String, String>> list = null;
|
||||
|
||||
for (String param : files.keySet()) {
|
||||
|
||||
List<MultipartFile> fileList = files.get(param);
|
||||
|
||||
//MimeUtil mu = new MimeUtil();
|
||||
//boolean isExcel = mu.isEnableMimeTypes(fileList, "application/vnd.ms-excel", "application/vnd.openxmlformats");
|
||||
//if (!isExcel)
|
||||
// throw new FileUploadException("지원되지 않는 형식의 파일입니다.\n엑셀 파일만 업로드할 수 있습니다.");
|
||||
|
||||
if (fileList.size() > 0) {
|
||||
MultipartFile file = fileList.get(0);
|
||||
|
||||
File savedFile = new File(uploadPath, file.getOriginalFilename());
|
||||
file.transferTo(savedFile);
|
||||
list = readExcel(savedFile, columnNames, startRecord);
|
||||
String ddd = "";
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 엑셀 읽기 - 파일 한 개만 지원, 모든 시트 처리
|
||||
* @param request
|
||||
* @param uploadFolder
|
||||
* @param columnNames
|
||||
* @param startRecord
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static HashMap<String, List<HashMap<String, String>>> readExcelSheets(MultipartHttpServletRequest request, String uploadFolder, String[] columnNames, int startRecord) throws Exception {
|
||||
MultiValueMap<String, MultipartFile> files = request.getMultiFileMap();
|
||||
|
||||
String sUploadPathProperty = "upload.path.physical." + EgovProperties.getProperty("globals.web.mode");
|
||||
String sSubDir = uploadFolder;
|
||||
|
||||
if (StringUtil.isEmpty(sSubDir)) {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM", Locale.getDefault());
|
||||
sSubDir = EgovProperties.getProperty("upload.path.common") + "/" + sdf.format(new Date()) + "/";
|
||||
}
|
||||
File uploadPath = new File(EgovProperties.getProperty(sUploadPathProperty), sSubDir);
|
||||
if (!uploadPath.exists())
|
||||
uploadPath.mkdirs();
|
||||
|
||||
HashMap<String, List<HashMap<String, String>>> list = null;
|
||||
|
||||
for (String param : files.keySet()) {
|
||||
List<MultipartFile> fileList = files.get(param);
|
||||
//MimeUtil mu = new MimeUtil();
|
||||
//boolean isExcel = mu.isEnableMimeTypes(fileList, "application/vnd.ms-excel", "application/vnd.openxmlformats");
|
||||
//if (!isExcel)
|
||||
// throw new FileUploadException("지원되지 않는 형식의 파일입니다.\n엑셀 파일만 업로드할 수 있습니다.");
|
||||
if (fileList.size() > 0) {
|
||||
MultipartFile file = fileList.get(0);
|
||||
File savedFile = new File(uploadPath, file.getOriginalFilename());
|
||||
file.transferTo(savedFile);
|
||||
list = readExcelSheets(savedFile, columnNames, startRecord);
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 엑셀 파일 읽어오기 - Workbook 인터페이스 적용<br>
|
||||
* - 첫 번째 시트만 처리<br>
|
||||
* - 주의 : 숫자형 데이터는 기본적으로 double type으로 반환. 숫자형 데이터가 .0으로 끝날 경우 int로 변환하여 반환<br>
|
||||
* - 키 이름 미지정 가능 : 엑셀 첫 레코드를 키 이름으로 사용 <br>
|
||||
* @param saveFile
|
||||
* @param keyNm 리턴 hashmap에 부여될 키 이름. null일 경우 엑셀 첫 레코드를 키 이름으로 사용
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
private static List<HashMap<String, String>> readExcel(File saveFile, String[] keyNm) throws Exception {
|
||||
return readExcel(saveFile, keyNm, 1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 엑셀 파일 읽어오기 - Workbook 인터페이스 적용<br>
|
||||
* - 첫 번째 시트만 처리<br>
|
||||
* - 주의 : 숫자형 데이터는 기본적으로 double type으로 반환. 숫자형 데이터가 .0으로 끝날 경우 int로 변환하여 반환<br>
|
||||
* - 키 이름 미지정 가능 : 엑셀 첫 레코드를 키 이름으로 사용 <br>
|
||||
* @param saveFile
|
||||
* @param keyNm 리턴 hashmap에 부여될 키 이름. null일 경우 엑셀 첫 레코드를 키 이름으로 사용
|
||||
* @param startRecord 데이터를 가져올 시작 레코드 : 첫 레코드 = 1
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
private static List<HashMap<String, String>> readExcel(File saveFile, String[] keyNm, int startRecord) throws Exception {
|
||||
Workbook wb = WorkbookFactory.create(saveFile);
|
||||
wb.setMissingCellPolicy(MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
|
||||
|
||||
List<HashMap<String, String>> excelRows = new ArrayList<HashMap<String, String>>();
|
||||
|
||||
boolean hasKeyName = true;
|
||||
if (keyNm == null)
|
||||
hasKeyName = false;
|
||||
|
||||
|
||||
try {
|
||||
|
||||
//hashmap용 key이름이 없을 경우 엑셀 1st row를 key 이름으로 설정
|
||||
if (!hasKeyName && wb.getSheetAt(0).getLastRowNum() > 0) {
|
||||
keyNm = new String[wb.getSheetAt(0).getRow(0).getLastCellNum()];
|
||||
for (int i = 0; i < wb.getSheetAt(0).getRow(0).getLastCellNum(); i++)
|
||||
try {
|
||||
keyNm[i] = wb.getSheetAt(0).getRow(0).getCell(i).getStringCellValue();
|
||||
}
|
||||
catch (Exception e) {
|
||||
keyNm[i] = "";
|
||||
}
|
||||
}
|
||||
|
||||
//int iRow = 0;
|
||||
for (Row row : wb.getSheetAt(0)) {
|
||||
//logger.debug(">>>>>>>>>>>>> excel row : {}", ++iRow);
|
||||
if (!hasKeyName && row.getRowNum() == 0)
|
||||
continue;
|
||||
|
||||
if (startRecord > row.getRowNum() + 1)
|
||||
continue;
|
||||
|
||||
|
||||
HashMap<String, String> excelCols = new HashMap<String, String>();
|
||||
|
||||
//주의 : foreach를 사용할 경우 컬럼이 빈 값이면 해당 컬럼 자제가 없어짐 (컬럼 인덱스가 달라짐)
|
||||
for (int i = 0; i < row.getLastCellNum(); i++) {
|
||||
|
||||
//cell을 가져올 때 MissingCellPolicy.CREATE_NULL_AS_BLANK 옵션 사용 필수 : 빈 컬럼일 때도 빈 값을 가져옴. poi v3.16이상 지원
|
||||
Cell cell = row.getCell(i, MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||
String strVal = "";
|
||||
//logger.debug(">>>>> {}, {}, {}", cell.getColumnIndex(), keyNm[cell.getColumnIndex()], cell.getCellTypeEnum().equals(CellType.NUMERIC) ? cell.getNumericCellValue() : cell.getStringCellValue());
|
||||
switch (cell.getCellTypeEnum()) {
|
||||
case NUMERIC:
|
||||
if (DateUtil.isCellDateFormatted(cell)) {
|
||||
java.util.Date dateValue = cell.getDateCellValue();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(EgovProperties.getProperty("common.date.type"));
|
||||
strVal = sdf.format(dateValue);
|
||||
}
|
||||
else {
|
||||
if (String.valueOf(cell.getNumericCellValue()).matches("[\\d]{1,}\\.0$"))
|
||||
strVal = String.valueOf(Double.valueOf(cell.getNumericCellValue()).intValue());
|
||||
else
|
||||
strVal = String.valueOf(cell.getNumericCellValue());
|
||||
}
|
||||
break;
|
||||
|
||||
case FORMULA:
|
||||
strVal = evaluator.evaluate(cell).getStringValue(); // .getCellFormula();
|
||||
break;
|
||||
|
||||
case BOOLEAN:
|
||||
if (cell.getBooleanCellValue())
|
||||
strVal = "true";
|
||||
else
|
||||
strVal = "false";
|
||||
break;
|
||||
|
||||
// case Cell.CELL_TYPE_ERROR:
|
||||
// break;
|
||||
//
|
||||
case _NONE:
|
||||
case BLANK:
|
||||
strVal = "";
|
||||
break;
|
||||
|
||||
default:
|
||||
strVal = cell.getStringCellValue();
|
||||
break;
|
||||
}
|
||||
|
||||
//issue : 컬럼 헤더 개수와 레코드 컬럼 개수가 맞지 않는 문제 발생
|
||||
if ((i + 1) <= keyNm.length)
|
||||
excelCols.put(keyNm[cell.getColumnIndex()], strVal);
|
||||
}
|
||||
//logger.debug(">>>>>>>>>>>>> excelCols : {}", excelCols.toString());
|
||||
excelRows.add(excelCols);
|
||||
}
|
||||
//logger.debug(">>>>>>>>>> saveFile : {}", saveFile.getAbsolutePath());
|
||||
}
|
||||
catch (Exception ex) {
|
||||
logger.error(ex.getMessage(), ex);
|
||||
throw ex;
|
||||
}
|
||||
finally {
|
||||
wb.close();
|
||||
if (saveFile.exists())
|
||||
saveFile.delete();
|
||||
}
|
||||
|
||||
return excelRows;
|
||||
}
|
||||
|
||||
|
||||
private static HashMap<String, List<HashMap<String, String>>> readExcelSheets(File saveFile, String[] keyNm, int startRecord) throws Exception {
|
||||
HashMap<String, List<HashMap<String, String>>> excels = new HashMap<>();
|
||||
|
||||
Workbook wb = WorkbookFactory.create(saveFile);
|
||||
wb.setMissingCellPolicy(MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
|
||||
|
||||
boolean hasKeyName = true;
|
||||
if (keyNm == null)
|
||||
hasKeyName = false;
|
||||
|
||||
try {
|
||||
//repeat sheet
|
||||
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
|
||||
List<HashMap<String, String>> excelRows = new ArrayList<HashMap<String, String>>();
|
||||
|
||||
//키 이름이 없을 경우 엑셀 첫 레코드를 키 이름으로 사용
|
||||
if (!hasKeyName && wb.getSheetAt(i).getLastRowNum() > 0) {
|
||||
keyNm = new String[wb.getSheetAt(i).getRow(0).getLastCellNum()];
|
||||
for (int j = 0; j < wb.getSheetAt(i).getRow(0).getLastCellNum(); j++)
|
||||
try {
|
||||
keyNm[j] = wb.getSheetAt(i).getRow(0).getCell(i).getStringCellValue();
|
||||
}
|
||||
catch (Exception e) {
|
||||
keyNm[j] = "";
|
||||
}
|
||||
}
|
||||
|
||||
for (Row row : wb.getSheetAt(i)) {
|
||||
if (!hasKeyName && row.getRowNum() == 0)
|
||||
continue;
|
||||
|
||||
if (startRecord > row.getRowNum() + 1)
|
||||
continue;
|
||||
|
||||
HashMap<String, String> excelCols = new HashMap<String, String>();
|
||||
|
||||
//주의 : foreach를 사용할 경우 컬럼이 빈 값이면 해당 컬럼 자제가 없어짐 (컬럼 인덱스가 달라짐)
|
||||
for (int k = 0; k < row.getLastCellNum(); k++) {
|
||||
//cell을 가져올 때 MissingCellPolicy.CREATE_NULL_AS_BLANK 옵션 사용 필수 : 빈 컬럼일 때도 빈 값을 가져옴. poi v3.16이상 지원
|
||||
Cell cell = row.getCell(k, MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||
String strVal = "";
|
||||
//logger.debug(">>>>> {}, {}, {}", cell.getColumnIndex(), keyNm[cell.getColumnIndex()], cell.getCellTypeEnum().equals(CellType.NUMERIC) ? cell.getNumericCellValue() : cell.getStringCellValue());
|
||||
switch (cell.getCellTypeEnum()) {
|
||||
case NUMERIC:
|
||||
if (DateUtil.isCellDateFormatted(cell)) {
|
||||
java.util.Date dateValue = cell.getDateCellValue();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(EgovProperties.getProperty("common.date.type"));
|
||||
strVal = sdf.format(dateValue);
|
||||
}
|
||||
else {
|
||||
if (String.valueOf(cell.getNumericCellValue()).matches("[\\d]{1,}\\.0$"))
|
||||
strVal = String.valueOf(Double.valueOf(cell.getNumericCellValue()).intValue());
|
||||
else
|
||||
strVal = String.valueOf(cell.getNumericCellValue());
|
||||
}
|
||||
break;
|
||||
|
||||
case FORMULA:
|
||||
strVal = evaluator.evaluate(cell).getStringValue(); // .getCellFormula();
|
||||
break;
|
||||
|
||||
case BOOLEAN:
|
||||
if (cell.getBooleanCellValue())
|
||||
strVal = "true";
|
||||
else
|
||||
strVal = "false";
|
||||
break;
|
||||
|
||||
case ERROR:
|
||||
case _NONE:
|
||||
case BLANK:
|
||||
strVal = "";
|
||||
break;
|
||||
|
||||
default:
|
||||
strVal = cell.getStringCellValue();
|
||||
break;
|
||||
}
|
||||
excelCols.put(keyNm[cell.getColumnIndex()], strVal);
|
||||
}
|
||||
excelRows.add(excelCols);
|
||||
}
|
||||
excels.put(wb.getSheetName(i), excelRows);
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
logger.error(ex.getMessage(), ex);
|
||||
throw ex;
|
||||
}
|
||||
finally {
|
||||
wb.close();
|
||||
if (saveFile.exists())
|
||||
saveFile.delete();
|
||||
}
|
||||
return excels;
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 엑셀이 확장자가 xlsx 일경우
|
||||
*
|
||||
* @param savedFile
|
||||
* @param keyNm
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@Deprecated
|
||||
private static List<HashMap<String, String>> readExcelXlsx(File savedFile, String[] keyNm) throws Exception {
|
||||
|
||||
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(savedFile));
|
||||
|
||||
List<HashMap<String, String>> excelRows = new ArrayList<HashMap<String, String>>();
|
||||
|
||||
try {
|
||||
|
||||
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
|
||||
for (Row row : wb.getSheetAt(i)) {
|
||||
HashMap<String, String> excelCols = new HashMap<String, String>();
|
||||
int cellCnt = 0;
|
||||
String strVal = "";
|
||||
for (Cell cell : row) {
|
||||
switch (cell.getCellType()) {
|
||||
case Cell.CELL_TYPE_STRING:
|
||||
System.out.print(cell.getRichStringCellValue().getString());
|
||||
strVal = cell.getRichStringCellValue().getString();
|
||||
break;
|
||||
case Cell.CELL_TYPE_NUMERIC:
|
||||
if (DateUtil.isCellDateFormatted(cell)) {
|
||||
java.util.Date dateValue = cell.getDateCellValue();
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
||||
System.out.print(format.format(dateValue)); // 2009-05-29
|
||||
strVal = format.format(dateValue);
|
||||
} else {
|
||||
System.out.print(Double.valueOf(cell.getNumericCellValue()).intValue());
|
||||
strVal = Double.valueOf(cell.getNumericCellValue()).intValue() + "";
|
||||
}
|
||||
break;
|
||||
case Cell.CELL_TYPE_FORMULA:
|
||||
System.out.print(cell.getCellFormula());
|
||||
strVal = cell.getCellFormula();
|
||||
break;
|
||||
case Cell.CELL_TYPE_BOOLEAN:
|
||||
System.out.print(cell.getBooleanCellValue());
|
||||
if (cell.getBooleanCellValue()) {
|
||||
strVal = "true";
|
||||
} else {
|
||||
strVal = "false";
|
||||
}
|
||||
break;
|
||||
case Cell.CELL_TYPE_ERROR:
|
||||
System.out.print(cell.getErrorCellValue());
|
||||
break;
|
||||
case Cell.CELL_TYPE_BLANK:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
excelCols.put(keyNm[cellCnt], strVal);
|
||||
cellCnt++;
|
||||
}
|
||||
excelRows.add(excelCols);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
//ex.printStackTrace();
|
||||
throw ex;
|
||||
}
|
||||
|
||||
|
||||
return excelRows;
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 엑셀이 확장자가 xls 일경우
|
||||
*
|
||||
* @param savedFile
|
||||
* @param keyNm
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
@Deprecated
|
||||
private static List<HashMap<String, String>> readExcelXls(File savedFile, String[] keyNm) throws Exception {
|
||||
|
||||
HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(savedFile));
|
||||
|
||||
List<HashMap<String, String>> excelDate = new ArrayList<HashMap<String, String>>();
|
||||
|
||||
try {
|
||||
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
|
||||
for (Row row : wb.getSheetAt(i)) {
|
||||
|
||||
HashMap<String, String> dateMap = new HashMap<String, String>();
|
||||
int cellCnt = 0;
|
||||
String strVal = "";
|
||||
|
||||
for (Cell cell : row) {
|
||||
switch (cell.getCellType()) {
|
||||
case Cell.CELL_TYPE_STRING:
|
||||
System.out.print(cell.getRichStringCellValue().getString());
|
||||
strVal = cell.getRichStringCellValue().getString();
|
||||
break;
|
||||
case Cell.CELL_TYPE_NUMERIC:
|
||||
if (DateUtil.isCellDateFormatted(cell)) {
|
||||
java.util.Date dateValue = cell.getDateCellValue();
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
||||
System.out.print(format.format(dateValue)); // 2009-05-29
|
||||
strVal = format.format(dateValue);
|
||||
} else {
|
||||
System.out.print(Double.valueOf(cell.getNumericCellValue()).intValue());
|
||||
strVal = Double.valueOf(cell.getNumericCellValue()).intValue() + "";
|
||||
}
|
||||
break;
|
||||
case Cell.CELL_TYPE_FORMULA:
|
||||
System.out.print(cell.getCellFormula());
|
||||
strVal = cell.getCellFormula();
|
||||
break;
|
||||
case Cell.CELL_TYPE_BOOLEAN:
|
||||
System.out.print(cell.getBooleanCellValue());
|
||||
if (cell.getBooleanCellValue()) {
|
||||
strVal = "true";
|
||||
} else {
|
||||
strVal = "false";
|
||||
}
|
||||
break;
|
||||
case Cell.CELL_TYPE_ERROR:
|
||||
System.out.print(cell.getErrorCellValue());
|
||||
break;
|
||||
case Cell.CELL_TYPE_BLANK:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
System.out.print("\t");
|
||||
|
||||
dateMap.put(keyNm[cellCnt], strVal);
|
||||
cellCnt++;
|
||||
}
|
||||
excelDate.add(dateMap);
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
//ex.printStackTrace();
|
||||
throw ex;
|
||||
}
|
||||
|
||||
return excelDate;
|
||||
}
|
||||
|
||||
|
||||
private static List<HashMap<String, String>> readOnlyExcel(File saveFile, String[] keyNm, int startRecord) throws Exception {
|
||||
Workbook wb = WorkbookFactory.create(saveFile);
|
||||
wb.setMissingCellPolicy(MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
|
||||
|
||||
List<HashMap<String, String>> excelRows = new ArrayList<HashMap<String, String>>();
|
||||
|
||||
boolean hasKeyName = true;
|
||||
if (keyNm == null)
|
||||
hasKeyName = false;
|
||||
|
||||
|
||||
try {
|
||||
|
||||
//hashmap용 key이름이 없을 경우 엑셀 1st row를 key 이름으로 설정
|
||||
if (!hasKeyName && wb.getSheetAt(0).getLastRowNum() > 0) {
|
||||
keyNm = new String[wb.getSheetAt(0).getRow(0).getLastCellNum()];
|
||||
for (int i = 0; i < wb.getSheetAt(0).getRow(0).getLastCellNum(); i++)
|
||||
try {
|
||||
keyNm[i] = wb.getSheetAt(0).getRow(0).getCell(i).getStringCellValue();
|
||||
}
|
||||
catch (Exception e) {
|
||||
keyNm[i] = "";
|
||||
}
|
||||
}
|
||||
|
||||
//int iRow = 0;
|
||||
for (Row row : wb.getSheetAt(0)) {
|
||||
//logger.debug(">>>>>>>>>>>>> excel row : {}", ++iRow);
|
||||
if (!hasKeyName && row.getRowNum() == 0)
|
||||
continue;
|
||||
|
||||
if (startRecord > row.getRowNum() + 1)
|
||||
continue;
|
||||
|
||||
|
||||
HashMap<String, String> excelCols = new HashMap<String, String>();
|
||||
|
||||
//주의 : foreach를 사용할 경우 컬럼이 빈 값이면 해당 컬럼 자제가 없어짐 (컬럼 인덱스가 달라짐)
|
||||
for (int i = 0; i < row.getLastCellNum(); i++) {
|
||||
|
||||
//cell을 가져올 때 MissingCellPolicy.CREATE_NULL_AS_BLANK 옵션 사용 필수 : 빈 컬럼일 때도 빈 값을 가져옴. poi v3.16이상 지원
|
||||
Cell cell = row.getCell(i, MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||
String strVal = "";
|
||||
//logger.debug(">>>>> {}, {}, {}", cell.getColumnIndex(), keyNm[cell.getColumnIndex()], cell.getCellTypeEnum().equals(CellType.NUMERIC) ? cell.getNumericCellValue() : cell.getStringCellValue());
|
||||
switch (cell.getCellTypeEnum()) {
|
||||
case NUMERIC:
|
||||
if (DateUtil.isCellDateFormatted(cell)) {
|
||||
java.util.Date dateValue = cell.getDateCellValue();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(EgovProperties.getProperty("common.date.type"));
|
||||
strVal = sdf.format(dateValue);
|
||||
}
|
||||
else {
|
||||
if (String.valueOf(cell.getNumericCellValue()).matches("[\\d]{1,}\\.0$"))
|
||||
strVal = String.valueOf(Double.valueOf(cell.getNumericCellValue()).intValue());
|
||||
else
|
||||
strVal = String.valueOf(cell.getNumericCellValue());
|
||||
}
|
||||
break;
|
||||
|
||||
case FORMULA:
|
||||
strVal = evaluator.evaluate(cell).getStringValue(); // .getCellFormula();
|
||||
break;
|
||||
|
||||
case BOOLEAN:
|
||||
if (cell.getBooleanCellValue())
|
||||
strVal = "true";
|
||||
else
|
||||
strVal = "false";
|
||||
break;
|
||||
|
||||
// case Cell.CELL_TYPE_ERROR:
|
||||
// break;
|
||||
//
|
||||
case _NONE:
|
||||
case BLANK:
|
||||
strVal = "";
|
||||
break;
|
||||
|
||||
default:
|
||||
strVal = cell.getStringCellValue();
|
||||
break;
|
||||
}
|
||||
|
||||
//issue : 컬럼 헤더 개수와 레코드 컬럼 개수가 맞지 않는 문제 발생
|
||||
if ((i + 1) <= keyNm.length)
|
||||
excelCols.put(keyNm[cell.getColumnIndex()], strVal);
|
||||
}
|
||||
//logger.debug(">>>>>>>>>>>>> excelCols : {}", excelCols.toString());
|
||||
excelRows.add(excelCols);
|
||||
}
|
||||
//logger.debug(">>>>>>>>>> saveFile : {}", saveFile.getAbsolutePath());
|
||||
}
|
||||
catch (Exception ex) {
|
||||
logger.error(ex.getMessage(), ex);
|
||||
throw ex;
|
||||
}
|
||||
finally {
|
||||
wb.close();
|
||||
if (saveFile.exists())
|
||||
saveFile.delete();
|
||||
}
|
||||
|
||||
return excelRows;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,60 +0,0 @@
|
||||
package itn.com.cmm.util;
|
||||
|
||||
|
||||
/**
|
||||
* 프로그램 파일명 : Order.java
|
||||
*
|
||||
* 프로그램 설명 : 쿼리에서 정렬방법을 정의하는 클래스
|
||||
*
|
||||
* 작 성 자 : jeong hoon hee
|
||||
*
|
||||
* 작 성 일 : 2013. 6. 7.
|
||||
*
|
||||
* Copyright(c) 2013 DAEYOON Co. Ltd. All rights reserved.
|
||||
*/
|
||||
public class Order {
|
||||
|
||||
private String columnName;
|
||||
private String orderType;
|
||||
|
||||
public Order() {
|
||||
super();
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
public Order(String columnName, String orderType) {
|
||||
super();
|
||||
this.columnName = columnName;
|
||||
this.orderType = orderType;
|
||||
}
|
||||
|
||||
public static Order asc(String columnName) {
|
||||
Order order = new Order();
|
||||
order.setColumnName(columnName);
|
||||
order.setOrderType("ASC");
|
||||
return order;
|
||||
}
|
||||
|
||||
public static Order desc(String columnName) {
|
||||
Order order = new Order();
|
||||
order.setColumnName(columnName);
|
||||
order.setOrderType("DESC");
|
||||
return order;
|
||||
}
|
||||
|
||||
public String getColumnName() {
|
||||
return columnName;
|
||||
}
|
||||
|
||||
public void setColumnName(String columnName) {
|
||||
this.columnName = columnName;
|
||||
}
|
||||
|
||||
public String getOrderType() {
|
||||
return orderType;
|
||||
}
|
||||
|
||||
public void setOrderType(String orderType) {
|
||||
this.orderType = orderType;
|
||||
}
|
||||
}
|
||||
@ -1,94 +0,0 @@
|
||||
package itn.com.cmm.util;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
public class OsProcessCheckUtil {
|
||||
|
||||
/**
|
||||
* 운영체제의 특정 프로세스 실행여부 확인하는 유틸
|
||||
*
|
||||
* */
|
||||
|
||||
public static String WindowProcessCheck(String processNm) throws Exception{
|
||||
|
||||
String line ="";
|
||||
String pId="";
|
||||
|
||||
try {
|
||||
|
||||
Process p = Runtime.getRuntime().exec(System.getenv("windir") +"\\system32\\"+"tasklist.exe");
|
||||
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
|
||||
while ((line = input.readLine()) != null) {
|
||||
System.out.println(line); //<-- Parse data here.
|
||||
String [] words = line.split(" ");
|
||||
String [] procInfo = new String[10];
|
||||
if (words[0].contains(processNm)){
|
||||
//System.out.println(line);
|
||||
int nCnt = 0;
|
||||
for(String item : words){
|
||||
if (item.equals(""))
|
||||
continue;
|
||||
System.out.print(item + " ");
|
||||
procInfo[nCnt] = item;
|
||||
nCnt++;
|
||||
}
|
||||
|
||||
System.out.println("Process Name : "+ procInfo[0]);
|
||||
System.out.println("Process ID : "+ procInfo[1]);
|
||||
System.out.println("Memory Usage : "+ procInfo[4]);
|
||||
pId = procInfo[1];
|
||||
}
|
||||
}
|
||||
input.close();
|
||||
} catch (Exception err) {
|
||||
err.printStackTrace();
|
||||
}
|
||||
|
||||
return pId;
|
||||
}
|
||||
|
||||
public static String LinuxProcessCheck(String processNm) throws Exception{
|
||||
|
||||
String line ="";
|
||||
String pId="";
|
||||
|
||||
try {
|
||||
|
||||
System.out.println("++++++++++++++++processNm++++++++++++++++++++++++"+processNm);
|
||||
String[] cmd = {"ps -ef | grep EnDeServer"};
|
||||
Process p = Runtime.getRuntime().exec(cmd);
|
||||
System.out.println("+++++++++++++++++++++++ppppppppppppppppppp++++++++++++++++++++++++++++++"+p);
|
||||
|
||||
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
|
||||
System.out.println("++++++++++++++++++++++++while Start++++++++++++++++++++++++++++++++++");
|
||||
System.out.println("+++++++++++++++input.readLine()+++++++++++++++++" + input.readLine());
|
||||
while ((line = input.readLine()) != null) {
|
||||
System.out.println(line); //<-- Parse data here.
|
||||
String [] words = line.split(" ");
|
||||
String [] procInfo = new String[10];
|
||||
if (words[0].contains(processNm)){
|
||||
System.out.println("+++++++++++line++++++++++++++++++++++"+line);
|
||||
int nCnt = 0;
|
||||
for(String item : words){
|
||||
if (item.equals(""))
|
||||
continue;
|
||||
System.out.print(item + " ");
|
||||
procInfo[nCnt] = item;
|
||||
nCnt++;
|
||||
}
|
||||
|
||||
System.out.println("Process Name : "+ procInfo[0]);
|
||||
System.out.println("Process ID : "+ procInfo[1]);
|
||||
System.out.println("Memory Usage : "+ procInfo[4]);
|
||||
pId = procInfo[1];
|
||||
}
|
||||
}
|
||||
input.close();
|
||||
} catch (Exception err) {
|
||||
err.printStackTrace();
|
||||
}
|
||||
|
||||
return pId;
|
||||
}
|
||||
}
|
||||
@ -27,27 +27,11 @@ public class RedirectUrlMaker {
|
||||
*/
|
||||
private String requestMappingUrl;
|
||||
|
||||
/**
|
||||
* 검색파라미터객체
|
||||
*/
|
||||
private Criteria criteria;
|
||||
|
||||
/**
|
||||
* 추가파라미터맵
|
||||
*/
|
||||
private Map<String, Object> paramMap = null;
|
||||
|
||||
/**
|
||||
* 생성자1
|
||||
*
|
||||
* @param requestMappingUrl : 요청매핑URL (예: "/board/list.do")
|
||||
* @param criteria : 검색파라미터객체
|
||||
*/
|
||||
public RedirectUrlMaker(String requestMappingUrl, Criteria criteria) {
|
||||
this.requestMappingUrl = requestMappingUrl;
|
||||
this.criteria = criteria;
|
||||
}
|
||||
|
||||
/**
|
||||
* 생성자2
|
||||
* @param requestMappingUrl
|
||||
@ -98,15 +82,6 @@ public class RedirectUrlMaker {
|
||||
|
||||
redirectUrl.append(this.requestMappingUrl);
|
||||
|
||||
if (this.criteria != null) {
|
||||
if (redirectUrl.toString().indexOf("?") == -1) {
|
||||
redirectUrl.append("?");
|
||||
} else {
|
||||
redirectUrl.append("&");
|
||||
}
|
||||
redirectUrl.append(this.criteria.getParams());
|
||||
}
|
||||
|
||||
if (this.paramMap != null) {
|
||||
if (this.paramMap.size() > 0) {
|
||||
Set<String> set = this.paramMap.keySet();
|
||||
|
||||
@ -1,100 +0,0 @@
|
||||
/*
|
||||
* Copyright 2008-2009 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package itn.com.cmm.util;
|
||||
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||
|
||||
import egovframework.rte.fdl.idgnr.impl.Base64;
|
||||
|
||||
public class TokenUtil {
|
||||
|
||||
private static final String TOKEN_KEY = "TOKEN_KEY";
|
||||
private static final Logger logger = Logger.getLogger(TokenUtil.class.getName());
|
||||
|
||||
/**
|
||||
* 로직처리를 위해 세션과 request에 Token 생성
|
||||
*
|
||||
* @param request
|
||||
*/
|
||||
public static void saveToken(HttpServletRequest request) {
|
||||
HttpSession session = request.getSession(true);
|
||||
long systemTime = System.currentTimeMillis();
|
||||
byte[] time = new Long(systemTime).toString().getBytes();
|
||||
byte[] id = session.getId().getBytes();
|
||||
|
||||
try {
|
||||
MessageDigest SHA = MessageDigest.getInstance("SHA-256");
|
||||
SHA.update(id);
|
||||
SHA.update(time);
|
||||
|
||||
String token = Base64.encode(SHA.digest());
|
||||
request.setAttribute(TOKEN_KEY, token);
|
||||
session.setAttribute(TOKEN_KEY, token);
|
||||
|
||||
logger.error("#########################################################################");
|
||||
logger.error("# Generate Token Key Value = " + token + " #");
|
||||
logger.error("#########################################################################");
|
||||
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
System.out.println("토큰에러");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 로직처리 이후 중복방지를 위해 세션의 Token 초기화
|
||||
*
|
||||
* @param request
|
||||
*/
|
||||
public static void resetToken(HttpServletRequest request) {
|
||||
HttpSession session = request.getSession(true);
|
||||
|
||||
try {
|
||||
session.removeAttribute(TOKEN_KEY);
|
||||
} catch (Exception e) {
|
||||
System.out.println("토큰에러");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 세션과 request의 Token이 동일한지 비교
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
public static boolean isTokenValid(HttpServletRequest request) {
|
||||
HttpSession session = request.getSession(true);
|
||||
String requestToken = request.getParameter(TOKEN_KEY);
|
||||
String sessionToken = (String) session.getAttribute(TOKEN_KEY);
|
||||
|
||||
if (requestToken == null || sessionToken == null) {
|
||||
logger.error("# null #");
|
||||
return false;
|
||||
} else {
|
||||
logger.error("# notnull #");
|
||||
return requestToken.equals(sessionToken);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
package itn.com.cmm.web;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
import org.springframework.beans.propertyeditors.CustomDateEditor;
|
||||
import org.springframework.beans.propertyeditors.StringTrimmerEditor;
|
||||
import org.springframework.web.bind.WebDataBinder;
|
||||
import org.springframework.web.bind.support.WebBindingInitializer;
|
||||
import org.springframework.web.context.request.WebRequest;
|
||||
|
||||
public class EgovBindingInitializer implements WebBindingInitializer {
|
||||
|
||||
@Override
|
||||
public void initBinder(WebDataBinder binder, WebRequest request) {
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||
dateFormat.setLenient(false);
|
||||
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
|
||||
binder.registerCustomEditor(String.class, new StringTrimmerEditor(false));
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,28 +1,19 @@
|
||||
package itn.com.sym.log.ulg.web;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import egovframework.rte.fdl.property.EgovPropertyService;
|
||||
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
|
||||
import itn.com.cmm.LoginVO;
|
||||
import itn.com.sym.log.ulg.service.EgovUserLogService;
|
||||
import itn.com.sym.log.ulg.service.UserLog;
|
||||
import itn.let.sym.log.clg.service.EgovLoginLogService;
|
||||
import itn.let.sym.log.clg.service.LoginLog;
|
||||
import itn.let.utl.sim.service.EgovClntInfo;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
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 egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||
import itn.com.cmm.LoginVO;
|
||||
import itn.let.sym.log.clg.service.EgovLoginLogService;
|
||||
import itn.let.sym.log.clg.service.LoginLog;
|
||||
import itn.let.utl.sim.service.EgovClntInfo;
|
||||
|
||||
/**
|
||||
* @Class Name : EgovUserLogController.java
|
||||
* @Description : 사용로그정보를 관리하기 위한 컨트롤러 클래스
|
||||
@ -44,81 +35,10 @@ import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
@Controller
|
||||
public class EgovUserLogController {
|
||||
|
||||
@Resource(name="EgovUserLogService")
|
||||
private EgovUserLogService userLogService;
|
||||
|
||||
@Resource(name="propertiesService")
|
||||
protected EgovPropertyService propertyService;
|
||||
|
||||
@Resource(name = "EgovLoginLogService")
|
||||
private EgovLoginLogService loginLogService;
|
||||
|
||||
|
||||
/**
|
||||
* 사용자 로그 목록 조회
|
||||
*
|
||||
* @param UserLog
|
||||
* @return sym/log/ulg/EgovUserLogList
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value="/sym/log/ulg/SelectUserLogList.do")
|
||||
public String selectUserLogInf(@ModelAttribute("searchVO") UserLog userLog,
|
||||
ModelMap model) throws Exception{
|
||||
|
||||
/** EgovPropertyService.sample */
|
||||
userLog.setPageUnit(propertyService.getInt("pageUnit"));
|
||||
userLog.setPageSize(propertyService.getInt("pageSize"));
|
||||
|
||||
/** pageing */
|
||||
PaginationInfo paginationInfo = new PaginationInfo();
|
||||
paginationInfo.setCurrentPageNo(userLog.getPageIndex());
|
||||
paginationInfo.setRecordCountPerPage(userLog.getPageUnit());
|
||||
paginationInfo.setPageSize(userLog.getPageSize());
|
||||
|
||||
userLog.setFirstIndex(paginationInfo.getFirstRecordIndex());
|
||||
userLog.setLastIndex(paginationInfo.getLastRecordIndex());
|
||||
userLog.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
|
||||
|
||||
HashMap<?, ?> _map = (HashMap<?, ?>)userLogService.selectUserLogInf(userLog);
|
||||
int totCnt = Integer.parseInt((String)_map.get("resultCnt"));
|
||||
|
||||
model.addAttribute("resultList", _map.get("resultList"));
|
||||
model.addAttribute("resultCnt", _map.get("resultCnt"));
|
||||
|
||||
paginationInfo.setTotalRecordCount(totCnt);
|
||||
model.addAttribute("paginationInfo", paginationInfo);
|
||||
|
||||
return "egovframework/com/sym/log/ulg/EgovUserLogList";
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 로그 상세 조회
|
||||
*
|
||||
* @param userLog
|
||||
* @param model
|
||||
* @return sym/log/ulg/EgovUserLogInqire구리더샵그린포레
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value="/sym/log/ulg/SelectUserLogDetail.do")
|
||||
public String selectUserLog(@ModelAttribute("searchVO") UserLog userLog,
|
||||
@RequestParam("occrrncDe") String occrrncDe,
|
||||
@RequestParam("rqesterId") String rqesterId,
|
||||
@RequestParam("srvcNm") String srvcNm,
|
||||
@RequestParam("methodNm") String methodNm,
|
||||
ModelMap model) throws Exception{
|
||||
|
||||
userLog.setOccrrncDe(occrrncDe.trim());
|
||||
userLog.setRqesterId(rqesterId.trim());
|
||||
userLog.setSrvcNm(srvcNm.trim());
|
||||
userLog.setMethodNm(methodNm.trim());
|
||||
|
||||
UserLog vo = userLogService.selectUserLog(userLog);
|
||||
model.addAttribute("result", vo);
|
||||
return "egovframework/com/sym/log/ulg/EgovUserLogDetail";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 사용자 로그 상세 조회
|
||||
*
|
||||
|
||||
@ -1,85 +0,0 @@
|
||||
package itn.com.usr.search.web;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
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.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
import org.springmodules.validation.commons.DefaultBeanValidator;
|
||||
|
||||
import egovframework.rte.fdl.property.EgovPropertyService;
|
||||
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||
import egovframework.rte.psl.dataaccess.util.EgovMap;
|
||||
import itn.com.cmm.ComDefaultCodeVO;
|
||||
import itn.com.cmm.EgovMessageSource;
|
||||
import itn.com.cmm.LoginVO;
|
||||
import itn.com.cmm.service.EgovCmmUseService;
|
||||
import itn.com.cmm.util.RedirectUrlMaker;
|
||||
import itn.com.uss.ion.cyb.service.CyberAlertManageService;
|
||||
import itn.com.uss.ion.cyb.service.CyberAlertManageVO;
|
||||
|
||||
/**
|
||||
* 개요
|
||||
* - 팝업창에 대한 Controller를 정의한다.
|
||||
*
|
||||
* 상세내용
|
||||
* - 팝업창에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
|
||||
* - 팝업창의 조회기능은 목록조회, 상세조회로, 사용자 화면 보기로 구분된다.
|
||||
* @author 이창원
|
||||
* @version 1.0
|
||||
* @created 05-8-2009 오후 2:19:57
|
||||
* <pre>
|
||||
* << 개정이력(Modification Information) >>
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ------- -------- ---------------------------
|
||||
* 2009.8.05 이창원 최초 생성
|
||||
* 2011.8.26 정진오 IncludedInfo annotation 추가
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
|
||||
@Controller
|
||||
public class SearchTotalController {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(SearchTotalController.class);
|
||||
|
||||
@Autowired
|
||||
private DefaultBeanValidator beanValidator;
|
||||
|
||||
/** cmmUseService */
|
||||
@Resource(name = "EgovCmmUseService")
|
||||
private EgovCmmUseService cmmUseService;
|
||||
/** EgovMessageSource */
|
||||
@Resource(name = "egovMessageSource")
|
||||
EgovMessageSource egovMessageSource;
|
||||
|
||||
/** EgovPropertyService */
|
||||
@Resource(name = "propertiesService")
|
||||
protected EgovPropertyService propertiesService;
|
||||
|
||||
/** cyberAlertManageService */
|
||||
@Resource(name = "cyberAlertManageService")
|
||||
private CyberAlertManageService cyberAlertManageService;
|
||||
|
||||
/**
|
||||
* 토탈 검색 예제 페이지
|
||||
* @param popupManageVO
|
||||
* @param model
|
||||
* @return "web/search/totalResearch"
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value = "/usr/search/totalSearch.do")
|
||||
public String totalResearch(@RequestParam Map<?, ?> commandMap, RedirectAttributes redirectAttributes, ModelMap model) throws Exception {
|
||||
return "web/search/totalSearch";
|
||||
}
|
||||
|
||||
}
|
||||
@ -8,6 +8,11 @@ import java.math.RoundingMode;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.ResultSetMetaData;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
@ -3500,6 +3505,5 @@ public class TestController {
|
||||
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "테스트", ""));
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -2,8 +2,6 @@ package itn.let.utl.sim.service;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import itn.com.cmm.util.IpUtil;
|
||||
|
||||
//import itn.com.cmm.service.EgovProperties;
|
||||
/**
|
||||
* 클라이언트(Client)의 IP주소, OS정보, 웹브라우저정보를 조회하는 Business Interface class
|
||||
@ -57,7 +55,6 @@ public class EgovClntInfo {
|
||||
|
||||
// IP주소
|
||||
//String ipAddr = request.getRemoteAddr();
|
||||
// String ipAddr = IpUtil.getClientIP(request) ;
|
||||
|
||||
// IP주소
|
||||
//String ipAddr = request.getRemoteAddr();
|
||||
|
||||
@ -8,438 +8,12 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>문자온 인터넷 웹문자 단체문자 대량문자발송 사이트</title>
|
||||
<meta name="Keywords" content="문자사이트, 대량문자, 단체문자, 문자발송, 문자전송, 인터넷문자, 단체문자사이트, 대량문자발송, 문자보내기, 단체문자발송">
|
||||
<meta name="description" content="LMS문자,MMS문자,WEB발신,인터넷,컴퓨터로 문자메세지보내기,웹발신문자,문자서비스,대량문자전송,단체문자보내기">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="문자온 인터넷 웹문자 단체문자 대량문자발송 사이트">
|
||||
<meta property="og:description" content="LMS문자,MMS문자,WEB발신,인터넷,컴퓨터로 문자메세지보내기,웹발신문자,문자서비스,대량문자전송,단체문자보내기">
|
||||
<meta property="og:image" content="https://www.munjaon.co.kr/publish/images/favicon/ms-icon-144x144.png">
|
||||
<meta property="og:url" content="https://www.munjaon.co.kr/web/main/mainPage.do">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<link rel="canonical" href="https://www.munjaon.co.kr/web/main/mainPage.do">
|
||||
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="/publish/images/favicon/apple-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="/publish/images/favicon/apple-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="/publish/images/favicon/apple-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="/publish/images/favicon/apple-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="/publish/images/favicon/apple-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="/publish/images/favicon/apple-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="/publish/images/favicon/apple-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="/publish/images/favicon/apple-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/publish/images/favicon/apple-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="/publish/images/favicon/android-icon-192x192.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/publish/images/favicon/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="/publish/images/favicon/favicon-96x96.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/publish/images/favicon/favicon-16x16.png">
|
||||
<link rel="manifest" href="/publish/images/favicon/manifest.json">
|
||||
|
||||
<!-- 에이스카운터 공통 스크립트 : AceCounter Log Gathering Script V.8.0.2019080601 -->
|
||||
<script language='javascript'>
|
||||
var _AceGID=(function(){var Inf=['gtc19.acecounter.com','8080','BS1A46164294118','AW','0','NaPm,Ncisy','ALL','0']; var _CI=(!_AceGID)?[]:_AceGID.val;var _N=0;var _T=new Image(0,0);if(_CI.join('.').indexOf(Inf[3])<0){ _T.src ="https://"+Inf[0]+'/?cookie'; _CI.push(Inf); _N=_CI.length; } return {o: _N,val:_CI}; })();
|
||||
var _AceCounter=(function(){var G=_AceGID;var _sc=document.createElement('script');var _sm=document.getElementsByTagName('script')[0];if(G.o!=0){var _A=G.val[G.o-1];var _G=(_A[0]).substr(0,_A[0].indexOf('.'));var _C=(_A[7]!='0')?(_A[2]):_A[3];var _U=(_A[5]).replace(/\,/g,'_');_sc.src='https:'+'//cr.acecounter.com/Web/AceCounter_'+_C+'.js?gc='+_A[2]+'&py='+_A[4]+'&gd='+_G+'&gp='+_A[1]+'&up='+_U+'&rd='+(new Date().getTime());_sm.parentNode.insertBefore(_sc,_sm);return _sc.src;}})();
|
||||
</script>
|
||||
<!-- AceCounter Log Gathering Script End -->
|
||||
|
||||
<meta name="google-site-verification" content="v6O1_CnJjlOM2ihd_AroMSAvKHgvMPWEK7LqZSbebZA" />
|
||||
<meta http-equiv="refresh" content="0; url=/web/main/mainPage.do" />
|
||||
<meta http-equiv="refresh" content="0; url=/cmm/main/mainPage.do" />
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- 검색어 순위 노출 h1태그 -->
|
||||
<div class="layer_popup_wrap" style="overflow:hidden;left:-9999em;top:-9999em;width:0;height:0;visibility:hidden;">
|
||||
<div class="popup_inner">
|
||||
<div class="layer_popup">
|
||||
<div class="layer_popup_cont">
|
||||
<h1>문자온은 인사, 홍보, 고객관리 목적의 대량문자 및 단체문자를 인터넷(웹)으로 발송하기 위한 최고의 문자사이트입니다.</h1>
|
||||
문자온은 인사, 홍보, 고객관리 목적의 대량문자 및 단체문자를 인터넷(웹)으로 발송하기 위한 최고의 문자사이트입니다.
|
||||
대량/단체 문자 발송을 위한 [문자전송], [주소록관리], [맞춤제작], [문자샘플]등 다양한 기능을 사용해보세요.
|
||||
|
||||
문자온 인터넷 웹문자 단체문자 대량문자발송 사이트
|
||||
문자사이트, 대량문자, 단체문자, 문자발송, 문자전송, 인터넷문자, 단체문자사이트, 대량문자발송, 문자보내기, 단체문자발송
|
||||
LMS문자,MMS문자,WEB발신,인터넷,컴퓨터로 문자메세지보내기,웹발신문자,문자서비스,대량문자전송,단체문자보내기
|
||||
문자온
|
||||
LMS문자,MMS문자,WEB발신,인터넷,컴퓨터로 문자메세지보내기,웹발신문자,문자서비스,대량문자전송,단체문자보내기
|
||||
|
||||
Q. [결제] "첫결제 이벤트" 결제 후 잔액이 남아 있는데 문자 발송이 안되는 경우는 왜 그런건가요?
|
||||
첫결제 이벤트 잔액이 남아 있더라도 1회 발송 문자수량 및 금액이 이벤트 잔액보다 큰 경우 문자가 발송되지 않으며, 이 경우 이벤트 잔액 이하의 금액으로 문자 수량을 조정해야 문자가 정상 발송됩니다.
|
||||
|
||||
Q. [결제] 첫결제 이벤트 후 추가 결제를 진행하였는데 잔액 부족으로 문자 발송이 안되는 경우는 왜 그런건가요?
|
||||
첫결제 이벤트 캐시가 남아 있는 경우에는 이벤트 캐시 전액 소진 후 추가결제에 따른 일반캐시 이용이 가능합니다. 이벤트 캐시 잔액만큼 문자를 선 발송하여 이벤트 캐시 전액 소진 후 자동 전환된 일반캐시를 사용하거나, 문자온 고객센터(1551-8011)로 문의주시면 즉시 처리 도와드리겠습니다.
|
||||
|
||||
Q. [장문·단문·그림문자] 한 번 보낸 문자를 저장해서 계속 보낼 수 있나요?
|
||||
문자온은 “내문자함” 기능을 제공하기 때문에 한 번 보낸 문자를 저장해서 계속 보낼 수 있습니다.문자전송 페이지에서 문자내용 작성 후 [문자저장] 버튼을 클릭하면 해당 문자가 [내문자함]에 보관되어 언제든지 자유롭게 재발송이 가능합니다.
|
||||
|
||||
Q. [장문·단문·그림문자] 그림문자 발송 시 첨부 이미지 위치나 순서를 지정할 수 있나요?
|
||||
그림문자 발송 시 텍스트 내용과 이미지의 노출 순서는 이동통신사 및 단말기의 설정에 따라 달라지기 때문에 임의적인 이미지 위치나 순서 지정이 불가합니다.
|
||||
|
||||
Q. [장문·단문·그림문자] 그림문자 발송 시 정해진 용량이 있나요?
|
||||
문자온 그림문자는 JPG, JPEG, PNG, GIF 파일 형식을 지원하며, 최대 10mb까지 발송 가능하나, 300kb에 최적화 되어 있기 때문에 300kb보다 용량이 크거나 이미지 내 텍스트가 많은 경우 해상도가 저하될 수 있습니다. 용량이 크거나 텍스트가 많은 이미지의 경우 반드시 사전 테스트 발송 후 대량 발송을 권장드립니다.
|
||||
|
||||
Q. [기타] 위임장은 어떻게 작성하나요?
|
||||
위임장 양식은 [마이페이지] → [발신번호 관리]에서 다운로드 가능하며 발신번호 명의자를 위임자, 문자온 이용자를 수임자(대리인)로 작성하여 제출해주시면 됩니다.
|
||||
|
||||
Q. [기타] 문자온 이용 중 버튼이 안눌러지는 등 장애나 오류가 발생한 경우에는 어떻게 해야 하나요?
|
||||
문자온은 크롬, 엣지, 네이버 웨일 등의 웹브라우저에 최적화되어 있으며, 인터넷 익스플로러를 지원하지 않습니다.(마이크로소프트사 인터넷 익스플로러 서비스 종료)만약 인터넷 익스플로러 이외의 브라우저 사용 중 장애 발생 시 문자온 고객센터(1551-8011)로 연락주시면 빠른 처리 도와드리겠습니다.
|
||||
|
||||
Q. [기타] 투넘버 또는 투폰 이용 시 발신번호 등록이 가능한가요?
|
||||
투넘버 및 투폰 번호의 경우 두 번째 번호는 가상의 번호인 관계로 이동통신사 및 가입 유형에 따라 본인 인증이 불가할 수 있습니다. 이 경우 고객님께서 가입하신 통신사를 통해 본인 인증 가능여부 확인 후 등록 신청을 진행해주시기 바랍니다.
|
||||
|
||||
Q. [기타] 세금계산서 발행은 어디서 어떻게 신청하나요?
|
||||
세금계산서는 즉시이체나 전용계좌를 통해 결제한 경우에만 발행되며, 문자온 사이트 상단 메뉴 중 [결제관리]→[요금 결제내역]→[결제수단/전용계좌 또는 즉시이체 선택]→[증빙서류 발행 신청] 버튼을 통해 신청 가능하며, 매주 수요일 일괄 발행됩니다.세금계산서 자동 발행을 희망하는 경우, [결제관리]→[세금계산서 발행 등록] 메뉴를 통해 편리하게 이용하실 수 있습니다.
|
||||
|
||||
Q. [장문·단문·그림문자] 문자 발송이 안되는데(발송결과 : 수신거부 등) 어떻게 해야 하나요?
|
||||
문자온 문자 발송 결과가 “수신거부”로 나타나는 경우, 고객님의 휴대폰 번호가 '번호도용 문자 차단서비스'에 가입되어 있을 확률이 매우 높습니다. 먼저, 고객님의 휴대폰 가입 통신사(SKT, KT, LG 등)에 문의하시어 '번호도용 문자 차단서비스’ 해지 후 재발송하시면 정상 이용 가능합니다.※ 이동통신사 번호도용 문자 차단서비스 : 웹에서 발송되는 스팸, 스미싱 문자 등에 내 번호가 회신번호로 악용되는 것을 방지해주는 서비스(서비스 해지 후 문자 정상 발송까지 3~7일 소요)
|
||||
|
||||
|
||||
<!-- 내부링크 -->
|
||||
<a href="/web/mjon/msgdata/selectMsgDataView.do">문자전송</a>
|
||||
<a href="/web/mjon/msgdata/selectMsgDataView.do">단문·장문·그림문자</a>
|
||||
<a href="/web/mjon/msgdata/excel/selectMsgExcelDataView.do">대량문자</a>
|
||||
<a href="/web/mjon/msgcampain/selectMsgDataView.do" rel="nosublink">선거문자</a>
|
||||
<a href="/web/mjon/msgcampain/selectMsgDataView.do" rel="nosublink">단문·장문·그림문자</a>
|
||||
<a href="/web/mjon/msgcampain/excel/selectMsgExcelDataView.do">단체문자</a>
|
||||
<a href="/web/mjon/custom/selectMsgCustomView.do" rel="nosublink">맞춤제작</a>
|
||||
<a href="/web/mjon/custom/selectMsgCustomView.do" rel="nosublink">맞춤제작 샘플</a>
|
||||
<a href="/web/mjon/custom/selectMsgCustomView.do?tap=2" rel="nosublink">제작방법 및 이용안내</a>
|
||||
<a href="/web/mjon/custom/selectMsgCustomView.do?tap=3" rel="nosublink">내보관함</a>
|
||||
<a href="/web/info/mjonInfo.do" rel="nosublink">문자온소개</a>
|
||||
<a href="/web/info/mjonInfo.do" rel="nosublink">서비스 소개</a>
|
||||
<a href="/web/info/mjonFunc.do" rel="nosublink">주요기능</a>
|
||||
<a href="/web/mjon/msgdata/selectBestMsgDataView.do" rel="nosublink">베스트문자샘플</a>
|
||||
<a href="/web/mjon/addr/selectAddrList.do" rel="nosublink">주소록관리</a>
|
||||
<a href="/web/mjon/addr/selectAddrList.do" rel="nosublink">주소록관리</a>
|
||||
<a href="/web/mjon/addrBlock/selectBlockList.do" rel="nosublink">수신거부</a>
|
||||
<a href="/web/mjon/addr/addrMobGuide.do" rel="nosublink">폰주소록 등록</a>
|
||||
<a href="/web/mjon/addragency/selectAddrAgencyList.do" rel="nosublink">주소록 입력 대행(무료)</a>
|
||||
<a href="/web/mjon/msgsent/selectMsgSentView.do">발송결과</a>
|
||||
<a href="/web/mjon/msgsent/selectMsgSentView.do">발송결과</a>
|
||||
<a href="/web/mjon/reservmsg/selectReservMsgView.do">예약관리</a>
|
||||
<a href="/web/mjon/reservmsg/selectReservMsgView.do">예약관리</a>
|
||||
<a href="/web/user/mberInfoIndex.do" rel="nosublink">마이페이지</a>
|
||||
<a href="/web/user/mberInfoChange.do" rel="nosublink">회원정보 변경</a>
|
||||
<a href="/web/user/passwordChange.do" rel="nosublink">비밀번호 변경</a>
|
||||
<a href="/web/user/sendNumberManage.do" rel="nosublink">발신번호 관리</a>
|
||||
<a href="/web/user/notifyManage.do" rel="nosublink">알림설정</a>
|
||||
<a href="/web/user/kisaReport.do" rel="nosublink">KISA 신고</a>
|
||||
<a href="/web/member/pay/PayList.do" rel="nosublink">결제관리</a>
|
||||
<a href="/web/pay/PayGuide.do" rel="nosublink">요금안내/견적내기</a>
|
||||
<a href="/web/member/pay/PayView.do" rel="nosublink">결제하기</a>
|
||||
<a href="/web/member/pay/PayList.do" rel="nosublink">요금 결제내역</a>
|
||||
<a href="/web/member/pay/PayUserList.do" rel="nosublink">요금 사용내역</a>
|
||||
<a href="/web/member/pay/BillPub.do" rel="nosublink">세금계산서 발행 등록</a>
|
||||
<a href="/web/cop/bbs/NoticeList.do" rel="nosublink">고객센터</a>
|
||||
<a href="/web/cop/bbs/NoticeList.do" rel="nosublink">공지사항</a>
|
||||
<a href="/web/cop/bbs/TermsList.do" rel="nosublink">이용약관</a>
|
||||
<a href="/web/cop/bbs/FaqList.do" rel="nosublink">자주하는 질문</a>
|
||||
<a href="/web/cop/bbs/QnaList.do" rel="nosublink">1:1 문의</a>
|
||||
<a href="/web/cop/bbs/SuggestList.do" rel="nosublink">불편신고</a>
|
||||
<a href="/web/cop/bbs/EventList.do" rel="nosublink">이벤트</a>
|
||||
|
||||
|
||||
<!-- 외부링크 -->
|
||||
<a href="https://www.google.co.kr/" rel="nosublink">구글</a>
|
||||
<a href="https://www.google.co.kr/search?q=%EB%AC%B8%EC%9E%90%EC%98%A8&sxsrf=APwXEdcKx6ujuAV6jyCUTBrIn-tCYHBIEg%3A1679645122629&source=hp&ei=wlkdZIW-JMKJoAS82JeQBw&iflsig=AOEireoAAAAAZB1n0nBH7Hs1UsVMhCB8aZOF0JxFsb5X&ved=0ahUKEwiFp4bXjfT9AhXCBIgKHTzsBXIQ4dUDCAo&uact=5&oq=%EB%AC%B8%EC%9E%90%EC%98%A8&gs_lcp=Cgdnd3Mtd2l6EAMyBAgjECcyBQgAEIAEOgsIABCABBCxAxCDAToRCC4QgAQQsQMQgwEQxwEQ0QM6CAgAEIAEELEDOg0ILhCABBDHARDRAxAKOgcIABCABBAKOggILhCABBCxAzoFCC4QgAQ6CwguEIAEELEDEIMBOhEILhCABBCxAxCDARDHARCvAToLCC4QgAQQxwEQrwE6BAguEAM6BAgAEAM6BwgjEOoCECc6CgguEK8BEMcBECdQAFj7E2CSFWgGcAB4A4ABqQGIAYULkgEDNS45mAEAoAEBsAEK&sclient=gws-wiz" rel="nosublink">구글_문자온</a>
|
||||
<a href="https://www.naver.com/" rel="nosublink">네이버</a>
|
||||
<a href="https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%EB%AC%B8%EC%9E%90%EC%98%A8" rel="nosublink">네이버_문자온</a>
|
||||
<a href="httsp://www.daum.net/" rel="nosublink">다음</a>
|
||||
<a href="https://search.daum.net/search?w=tot&DA=YZR&t__nil_searchbox=btn&sug=&sugo=&sq=&o=&q=%EB%AC%B8%EC%9E%90%EC%98%A8" rel="nosublink">다음_문자온</a>
|
||||
|
||||
<a href="https://www.youtube.com/" rel="nosublink">유튜브</a>
|
||||
|
||||
<a href="https://www.facebook.com/" rel="nosublink">페이스북</a>
|
||||
<a href="https://www.amazon.com/" rel="nosublink">아마존</a>
|
||||
<a href="https://www.instagram.com/" rel="nosublink">인스타그램</a>
|
||||
<a href="https://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8" rel="nosublink">위키</a>
|
||||
<a href="https://www.microsoft.com/ko-kr/" rel="nosublink">마이크로소프트</a>
|
||||
<a href="https://twitter.com/" rel="nosublink">트위터</a>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="serv_content qna_cont current" id="tab5_3" style="overflow:hidden;left:-9999em;top:-9999em;width:0;height:0;visibility:hidden;">
|
||||
<form name="searchForm" id="searchForm">
|
||||
<input type="hidden" name="seCmmnCdId" value="">
|
||||
<input type="hidden" name="bbsId" value="">
|
||||
|
||||
<input type="hidden" name="nttId" id="nttId" value="0">
|
||||
<input type="hidden" name="searchNttId" id="searchNttId" value="0">
|
||||
<input type="hidden" name="pageIndex" value="1">
|
||||
<div class="heading">
|
||||
<h2>자주하는 질문</h2>
|
||||
</div>
|
||||
<div>
|
||||
<div class="search_wrap clearfix">
|
||||
<div class="btn_left">
|
||||
<label for="" class="label">검색조건 선택</label>
|
||||
<select name="searchCnd" id="searchSel" class="selType2">
|
||||
<option value="" selected="selected">전체</option>
|
||||
<option value="0">제목</option>
|
||||
<option value="1">내용</option>
|
||||
</select>
|
||||
<div class="search">
|
||||
<label for="id" class="label"></label>
|
||||
<input type="text" name="searchWrd" id="id" value="" placeholder="검색어를 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요.'" spellcheck="false" data-ms-editor="true">
|
||||
<button type="button" class="btnType btnType2" onclick="javascript:linkPage('1'); return false;">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="list_tab_wrap">
|
||||
<!-- tab button -->
|
||||
<ul class="list_tab">
|
||||
|
||||
<li class="tab active">
|
||||
<button type="button" onclick="listTab(this,'1');setBbsId(''); return false;">전체</button>
|
||||
</li>
|
||||
|
||||
<li class="tab">
|
||||
<button type="button" onclick="listTab(this,'2');setBbsId('BBSMSTR_000000000711'); return false;">Best</button>
|
||||
</li>
|
||||
|
||||
<li class="tab">
|
||||
<button type="button" onclick="listTab(this,'3');setBbsId('BBSMSTR_000000000712'); return false;">장문·단문·그림문자</button>
|
||||
</li>
|
||||
|
||||
<li class="tab">
|
||||
<button type="button" onclick="listTab(this,'4');setBbsId('BBSMSTR_000000000713'); return false;">홍보문자</button>
|
||||
</li>
|
||||
|
||||
<li class="tab">
|
||||
<button type="button" onclick="listTab(this,'5');setBbsId('BBSMSTR_000000000714'); return false;">맞춤제작</button>
|
||||
</li>
|
||||
|
||||
<li class="tab">
|
||||
<button type="button" onclick="listTab(this,'6');setBbsId('BBSMSTR_000000000716'); return false;">주소록관리</button>
|
||||
</li>
|
||||
|
||||
<li class="tab">
|
||||
<button type="button" onclick="listTab(this,'7');setBbsId('BBSMSTR_000000000717'); return false;">결제</button>
|
||||
</li>
|
||||
|
||||
<li class="tab">
|
||||
<button type="button" onclick="listTab(this,'8');setBbsId('BBSMSTR_000000000718'); return false;">회원정보</button>
|
||||
</li>
|
||||
|
||||
<li class="tab">
|
||||
<button type="button" onclick="listTab(this,'9');setBbsId('BBSMSTR_000000000719'); return false;">기타</button>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<!--// tab button -->
|
||||
<select name="pageUnit" id="pageUnit" class="selType2" title="검색조건선택" onchange="linkPage(1);">
|
||||
<option value="10" selected="">10줄</option>
|
||||
<option value="20">20줄</option>
|
||||
<option value="30">30줄</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<span id="bbsLoad">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
$('#totCnt').html("38") ;
|
||||
</script>
|
||||
|
||||
|
||||
<div class="list_cont qna_cont" id="listTab_1">
|
||||
<ul class="qna">
|
||||
|
||||
|
||||
<li>
|
||||
<button type="button" onclick="qnaList(this)" title="닫힘">
|
||||
<p class="question_text">Q.</p>
|
||||
<p>
|
||||
<span>[결제]</span>
|
||||
"첫결제 이벤트" 결제 후 잔액이 남아 있는데 문자 발송이 안되는 경우는 왜 그런건가요?
|
||||
</p>
|
||||
</button>
|
||||
<div class="qna_answer">
|
||||
<p class="answer_text">A.</p>
|
||||
<p class="answer_cont">
|
||||
첫결제 이벤트 잔액이 남아 있더라도 1회 발송 문자수량 및 금액이 이벤트 잔액보다 큰 경우 문자가 발송되지 않으며, 이 경우 이벤트 잔액 이하의 금액으로 문자 수량을 조정해야 문자가 정상 발송됩니다.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<button type="button" onclick="qnaList(this)" title="닫힘">
|
||||
<p class="question_text">Q.</p>
|
||||
<p>
|
||||
<span>[결제]</span>
|
||||
첫결제 이벤트 후 추가 결제를 진행하였는데 잔액 부족으로 문자 발송이 안되는 경우는 왜 그런건가요?
|
||||
</p>
|
||||
</button>
|
||||
<div class="qna_answer">
|
||||
<p class="answer_text">A.</p>
|
||||
<p class="answer_cont">
|
||||
첫결제 이벤트 캐시가 남아 있는 경우에는 이벤트 캐시 전액 소진 후 추가결제에 따른 일반캐시 이용이 가능합니다. 이벤트 캐시 잔액만큼 문자를 선 발송하여 이벤트 캐시 전액 소진 후 자동 전환된 일반캐시를 사용하거나, 문자온 고객센터(1551-8011)로 문의주시면 즉시 처리 도와드리겠습니다.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<button type="button" onclick="qnaList(this)" title="닫힘">
|
||||
<p class="question_text">Q.</p>
|
||||
<p>
|
||||
<span>[장문·단문·그림문자]</span>
|
||||
한 번 보낸 문자를 저장해서 계속 보낼 수 있나요?
|
||||
</p>
|
||||
</button>
|
||||
<div class="qna_answer">
|
||||
<p class="answer_text">A.</p>
|
||||
<p class="answer_cont">
|
||||
문자온은 “내문자함” 기능을 제공하기 때문에 한 번 보낸 문자를 저장해서 계속 보낼 수 있습니다.<br>문자전송 페이지에서 문자내용 작성 후 [문자저장] 버튼을 클릭하면 해당 문자가 [내문자함]에 보관되어 언제든지 자유롭게 재발송이 가능합니다.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<button type="button" onclick="qnaList(this)" title="닫힘">
|
||||
<p class="question_text">Q.</p>
|
||||
<p>
|
||||
<span>[장문·단문·그림문자]</span>
|
||||
그림문자 발송 시 첨부 이미지 위치나 순서를 지정할 수 있나요?
|
||||
</p>
|
||||
</button>
|
||||
<div class="qna_answer">
|
||||
<p class="answer_text">A.</p>
|
||||
<p class="answer_cont">
|
||||
그림문자 발송 시 텍스트 내용과 이미지의 노출 순서는 이동통신사 및 단말기의 설정에 따라 달라지기 때문에 임의적인 이미지 위치나 순서 지정이 불가합니다.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<button type="button" onclick="qnaList(this)" title="닫힘">
|
||||
<p class="question_text">Q.</p>
|
||||
<p>
|
||||
<span>[장문·단문·그림문자]</span>
|
||||
그림문자 발송 시 정해진 용량이 있나요?
|
||||
</p>
|
||||
</button>
|
||||
<div class="qna_answer">
|
||||
<p class="answer_text">A.</p>
|
||||
<p class="answer_cont">
|
||||
문자온 그림문자는 JPG, JPEG, PNG, GIF 파일 형식을 지원하며, 최대 10mb까지 발송 가능하나, 300kb에 최적화 되어 있기 때문에 300kb보다 용량이 크거나 이미지 내 텍스트가 많은 경우 해상도가 저하될 수 있습니다. 용량이 크거나 텍스트가 많은 이미지의 경우 반드시 사전 테스트 발송 후 대량 발송을 권장드립니다.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<button type="button" onclick="qnaList(this)" title="닫힘">
|
||||
<p class="question_text">Q.</p>
|
||||
<p>
|
||||
<span>[기타]</span>
|
||||
위임장은 어떻게 작성하나요?
|
||||
</p>
|
||||
</button>
|
||||
<div class="qna_answer">
|
||||
<p class="answer_text">A.</p>
|
||||
<p class="answer_cont">
|
||||
위임장 양식은 [마이페이지] → [발신번호 관리]에서 다운로드 가능하며 발신번호 명의자를 위임자, 문자온 이용자를 수임자(대리인)로 작성하여 제출해주시면 됩니다.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<button type="button" onclick="qnaList(this)" title="닫힘">
|
||||
<p class="question_text">Q.</p>
|
||||
<p>
|
||||
<span>[기타]</span>
|
||||
문자온 이용 중 버튼이 안눌러지는 등 장애나 오류가 발생한 경우에는 어떻게 해야 하나요?
|
||||
</p>
|
||||
</button>
|
||||
<div class="qna_answer">
|
||||
<p class="answer_text">A.</p>
|
||||
<p class="answer_cont">
|
||||
문자온은 크롬, 엣지, 네이버 웨일 등의 웹브라우저에 최적화되어 있으며, 인터넷 익스플로러를 지원하지 않습니다.(마이크로소프트사 인터넷 익스플로러 서비스 종료)<br>만약 인터넷 익스플로러 이외의 브라우저 사용 중 장애 발생 시 문자온 고객센터(1551-8011)로 연락주시면 빠른 처리 도와드리겠습니다.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<button type="button" onclick="qnaList(this)" title="닫힘">
|
||||
<p class="question_text">Q.</p>
|
||||
<p>
|
||||
<span>[기타]</span>
|
||||
투넘버 또는 투폰 이용 시 발신번호 등록이 가능한가요?
|
||||
</p>
|
||||
</button>
|
||||
<div class="qna_answer">
|
||||
<p class="answer_text">A.</p>
|
||||
<p class="answer_cont">
|
||||
투넘버 및 투폰 번호의 경우 두 번째 번호는 가상의 번호인 관계로 이동통신사 및 가입 유형에 따라 본인 인증이 불가할 수 있습니다. 이 경우 고객님께서 가입하신 통신사를 통해 본인 인증 가능여부 확인 후 등록 신청을 진행해주시기 바랍니다.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<button type="button" onclick="qnaList(this)" title="닫힘">
|
||||
<p class="question_text">Q.</p>
|
||||
<p>
|
||||
<span>[기타]</span>
|
||||
세금계산서 발행은 어디서 어떻게 신청하나요?
|
||||
</p>
|
||||
</button>
|
||||
<div class="qna_answer">
|
||||
<p class="answer_text">A.</p>
|
||||
<p class="answer_cont">
|
||||
세금계산서는 즉시이체나 전용계좌를 통해 결제한 경우에만 발행되며, 문자온 사이트 상단 메뉴 중 [결제관리]→[요금 결제내역]→[결제수단/전용계좌 또는 즉시이체 선택]→[증빙서류 발행 신청] 버튼을 통해 신청 가능하며, 매주 수요일 일괄 발행됩니다.<br>세금계산서 자동 발행을 희망하는 경우, [결제관리]→[세금계산서 발행 등록] 메뉴를 통해 편리하게 이용하실 수 있습니다.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<button type="button" onclick="qnaList(this)" title="닫힘">
|
||||
<p class="question_text">Q.</p>
|
||||
<p>
|
||||
<span>[장문·단문·그림문자]</span>
|
||||
문자 발송이 안되는데(발송결과 : 수신거부 등) 어떻게 해야 하나요?
|
||||
</p>
|
||||
</button>
|
||||
<div class="qna_answer">
|
||||
<p class="answer_text">A.</p>
|
||||
<p class="answer_cont">
|
||||
문자온 문자 발송 결과가 “수신거부”로 나타나는 경우, 고객님의 휴대폰 번호가 '번호도용 문자 차단서비스'에 가입되어 있을 확률이 매우 높습니다. 먼저, 고객님의 휴대폰 가입 통신사(SKT, KT, LG 등)에 문의하시어 '번호도용 문자 차단서비스’ 해지 후 재발송하시면 정상 이용 가능합니다.<br>※ 이동통신사 번호도용 문자 차단서비스 : 웹에서 발송되는 스팸, 스미싱 문자 등에 내 번호가 회신번호로 악용되는 것을 방지해주는 서비스(서비스 해지 후 문자 정상 발송까지 3~7일 소요)
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
<!-- pagination -->
|
||||
<ul class="pagination">
|
||||
<li class="on"><button type="button"><a href="#" title="현재페이지">1</a></button></li><li><button type="button" onclick="linkPage(2);return false;"><a href="#" title="2페이지">2</a></button></li><li><button type="button" onclick="linkPage(3);return false;"><a href="#" title="3페이지">3</a></button></li><li><button type="button" onclick="linkPage(4);return false;"><a href="#" title="4페이지">4</a></button></li>
|
||||
|
||||
</ul>
|
||||
<!-- pagination -->
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</span></div>
|
||||
</body>
|
||||
<script>
|
||||
//location.href="/web/main/mainPage.do";
|
||||
</script>
|
||||
</html>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user