commit 02333d5058bb2cf5d0b36037f1e94c07036b90d2 Author: xit Date: Tue May 2 13:17:06 2023 +0900 최초 커밋 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d96ebb4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,198 @@ + + 4.0.0 + + cokr.xit + xit-code + 23.04.01 + jar + + xit-code + http://maven.apache.org + + + UTF-8 + + 1.8 + ${java.version} + ${java.version} + + 5.3.20 + 4.1.0 + + + + + mvn2s + https://repo1.maven.org/maven2/ + + true + + + true + + + + egovframe + http://maven.egovframe.kr:8080/maven/ + + true + + + false + + + + egovframe2 + https://www.egovframe.go.kr/maven/ + + true + + + false + + + + + + + cokr.xit + xit-foundation + 23.04.01 + + + + org.mariadb.jdbc + mariadb-java-client + 2.7.2 + test + + + + + + install + ${basedir}/target + ${project.artifactId}-${project.version} + + + ${basedir}/src/main/resources + + + + ${basedir}/src/test/resources + ${basedir}/src/main/resources + + + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + + 80 + / + + -Xms256m -Xmx768m -XX:MaxPermSize=256m + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + UTF-8 + + + + org.codehaus.mojo + hibernate3-maven-plugin + 2.1 + + + + hbm2ddl + annotationconfiguration + + + + + + org.hsqldb + hsqldb + 2.3.2 + + + + + + org.codehaus.mojo + emma-maven-plugin + 1.0-alpha-3 + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.1 + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + **/*.class + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0 + + true + xml + + **/Abstract*.java + **/*Suite.java + + + **/*Test.java + + + + + org.codehaus.mojo + emma-maven-plugin + true + + + org.apache.maven.plugins + maven-source-plugin + 2.2 + + + attach-sources + + jar + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + + + \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/CodeCategory.java b/src/main/java/cokr/xit/base/code/CodeCategory.java new file mode 100644 index 0000000..d4c43df --- /dev/null +++ b/src/main/java/cokr/xit/base/code/CodeCategory.java @@ -0,0 +1,115 @@ +package cokr.xit.base.code; + +import java.util.Date; + +import cokr.xit.foundation.Assert; + +/**코드 카테고리 정보 + * @author mjkhan + */ +public class CodeCategory { + private String + id, + name, + description, + createdBy, + inUse; + private Date createdAt; + + /**id를 반환한다. + * @return id + */ + public String getId() { + return id; + } + + /**id를 설정한다. + * @param id id + */ + public void setId(String id) { + this.id = id; + } + + /**이름을 반환한다. + * @return 이름 + */ + public String getName() { + return name; + } + + /**이름을 설정한다. + * @param name 이름 + */ + public void setName(String name) { + this.name = name; + } + + /**설명을 반환한다. + * @return description + */ + public String getDescription() { + return description; + } + + /**설명을 설정한다. + * @param description 설명 + */ + public void setDescription(String description) { + this.description = description; + } + + /**등록자 아이디를 반환한다. + * @return 등록자 아이디 + */ + public String getCreatedBy() { + return createdBy; + } + + /**등록자 아이디를 설정한다. + * @param createdBy 등록자 아이디 + */ + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + /**사용여부를 반환한다. + * @return + * + */ + public boolean inUse() { + return "Y".equals(getInUse()); + } + + /**사용여부를 반환한다. + * @return 사용여부 + * + */ + public String getInUse() { + return Assert.ifEmpty(inUse, "Y"); + } + + /**사용여부를 설정한다. + * @param inUse 사용여부 + */ + public void setInUse(String inUse) { + this.inUse = inUse; + } + + /**등록일시를 반환한다. + * @return 등록일시 + */ + public Date getCreatedAt() { + return createdAt; + } + + /**등록일시를 설정한다. + * @param createdAt 등록일시 + */ + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/CodeGroup.java b/src/main/java/cokr/xit/base/code/CodeGroup.java new file mode 100644 index 0000000..5bb38bc --- /dev/null +++ b/src/main/java/cokr/xit/base/code/CodeGroup.java @@ -0,0 +1,138 @@ +package cokr.xit.base.code; + +import java.util.Date; + +import cokr.xit.foundation.Assert; + +/**코드 그룹 정보 + * @author mjkhan + */ +public class CodeGroup { + private String + id, + name, + categoryID, + description, + inUse, + createdBy; + private Date createdAt; + + /**코드그룹 id를 반환한다. + * @return 코드그룹 id + */ + public String getId() { + return id; + } + + /**코드그룹 id를 설정한다. + * @param id 코드그룹 id + */ + public void setId(String id) { + this.id = id; + } + + /**코드그룹 이름을 반환한다. + * @return 코드그룹 이름 + */ + public String getName() { + return name; + } + + /**코드그룹 이름을 설정한다. + * @param name 코드그룹 이름 + */ + public void setName(String name) { + this.name = name; + } + + /**코드 카테고리 id를 반환한다. + * @return 코드 카테고리 id + */ + public String getCategoryID() { + return categoryID; + } + + /**코드 카테고리 id를 설정한다. + * @param categoryID 코드 카테고리 id + */ + public void setCategoryID(String categoryID) { + this.categoryID = categoryID; + } + + /**설명을 반환한다. + * @return 설명 + */ + public String getDescription() { + return description; + } + + /**설명을 설정한다. + * @param description 설명 + */ + public void setDescription(String description) { + this.description = description; + } + + /**사용여부를 반환한다. + * @return 사용여부 + * + */ + public String getInUse() { + return Assert.ifEmpty(inUse, "Y"); + } + + /**사용여부를 반환한다. + * @return 사용여부 + * + */ + public boolean inUse() { + return "Y".equals(getInUse()); + } + + /**사용여부를 설정한다. + * @param inUse 사용여부 + * + */ + public void setInUse(String inUse) { + this.inUse = inUse; + } + + /**등록자 id를 반환한다. + * @return 등록자 id + */ + public String getCreatedBy() { + return createdBy; + } + + /**등록자 id를 설정한다. + * @param createdBy 등록자 id + */ + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + /**등록 일시를 반환한다. + * @return 등록 일시 + */ + public Date getCreatedAt() { + return createdAt; + } + + /**등록 일시를 설정한다. + * @param createdAt 등록 일시 + */ + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + @Override + public String toString() { + return String.format("%s('%s', '%s')", getClass().getSimpleName(), getId(), getName()); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/CommonCode.java b/src/main/java/cokr/xit/base/code/CommonCode.java new file mode 100644 index 0000000..e5fcc3b --- /dev/null +++ b/src/main/java/cokr/xit/base/code/CommonCode.java @@ -0,0 +1,197 @@ +package cokr.xit.base.code; + +import java.util.Date; + +import cokr.xit.foundation.Assert; + +/**공통코드 정보 + * @author mjkhan + */ +public class CommonCode { + private String + groupID, + code, + value, + description, + etc1, + etc2, + etc3, + createdBy, + inUse; + private int sortOrder; + private Date createdAt; + + /**코드그룹 id를 반환한다. + * @return 코드그룹 id + */ + public String getGroupID() { + return groupID; + } + + /**코드그룹 id를 설정한다. + * @param groupID 코드그룹 id + */ + public void setGroupID(String groupID) { + this.groupID = groupID; + } + /**코드를 반환한다. + * @return 코드 + */ + public String getCode() { + return code; + } + + /**코드를 설정한다. + * @param id 코드 + */ + public void setCode(String id) { + this.code = id; + } + + /**코드이름을 반환한다. + * @return 코드이름 + */ + public String getValue() { + return value; + } + + /**코드이름을 설정한다. + * @param name 코드이름 + */ + public void setValue(String name) { + this.value = name; + } + + /**설명을 반환한다. + * @return 설명 + */ + public String getDescription() { + return description; + } + + /**설명을 설정한다. + * @param description 설명 + */ + public void setDescription(String description) { + this.description = description; + } + + /**기타값 1을 반환한다. + * @return 기타값 1 + */ + public String getEtc1() { + return etc1; + } + + /**기타값 1을 설정한다. + * @param etc1 기타값 1 + */ + public void setEtc1(String etc1) { + this.etc1 = etc1; + } + + /**기타값 2를 반환한다. + * @return 기타값 2 + */ + public String getEtc2() { + return etc2; + } + + /**기타값 2를 설정한다. + * @param etc2 기타값 2 + */ + public void setEtc2(String etc2) { + this.etc2 = etc2; + } + + /**기타값 3을 반환한다. + * @return 기타값 3 + */ + public String getEtc3() { + return etc3; + } + + /**기타값 3을 설정한다. + * @param etc3 기타값 3 + */ + public void setEtc3(String etc3) { + this.etc3 = etc3; + } + + /**등록자 id를 반환한다. + * @return 등록자 id + */ + public String getCreatedBy() { + return createdBy; + } + + /**등록자 id를 설정한다. + * @param createdBy 등록자 id + */ + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + /**사용여부를 반환한다. + * @return 사용여부 + * + */ + public String getInUse() { + return Assert.ifEmpty(inUse, "Y"); + } + + /**사용여부를 반환한다. + * @return 사용여부 + * + */ + public boolean inUse() { + return "Y".equals(getInUse()); + } + + /**사용여부를 설정한다. + * @param inUse 사용여부 + * + */ + public void setInUse(String inUse) { + this.inUse = inUse; + } + + /**정렬순서를 반환한다. + * @return 정렬순서 + */ + public int getSortOrder() { + return sortOrder; + } + + /**정렬순서를 설정한다. + * @param sortOrder 정렬순서 + */ + public void setSortOrder(int sortOrder) { + this.sortOrder = sortOrder; + } + + /**등록일시를 반환한다. + * @return 등록일시 + */ + public Date getCreatedAt() { + return createdAt; + } + + /**등록일시를 설정한다. + * @param createdAt 등록일시 + */ + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + @Override + public String toString() { + return String.format("%s('%s', '%s', '%s')", getClass().getSimpleName(), getGroupID(), getCode(), getValue()); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/dao/CodeMapper.java b/src/main/java/cokr/xit/base/code/dao/CodeMapper.java new file mode 100644 index 0000000..482ac9c --- /dev/null +++ b/src/main/java/cokr/xit/base/code/dao/CodeMapper.java @@ -0,0 +1,282 @@ +package cokr.xit.base.code.dao; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.egovframe.rte.psl.dataaccess.mapper.Mapper; + +import cokr.xit.base.code.CodeCategory; +import cokr.xit.base.code.CodeGroup; +import cokr.xit.base.code.CommonCode; +import cokr.xit.base.code.service.CodeQuery; +import cokr.xit.foundation.component.AbstractMapper; +import cokr.xit.foundation.data.DataObject; + +/**공통코드 관리 DAO + * @author mjkhan + */ +@Mapper("codeMapper") +public interface CodeMapper extends AbstractMapper { + /**코드 분류 목록을 조회한다. + * @param pageNum 반환할 코드 분류 목록의 페이지 번호 + * @param fetchSize 한 번에 반환할 코드 분류의 갯수 + * @return 코드 분류 목록 + */ + List getCategoryList(CodeQuery req); + + /**지정하는 아이디의 코드 분류들을 가져온다. + * @param categoryIDs 코드 분류 아이디 + * @return 코드 분류 + */ + List getCategories(CodeQuery req); + + default List getCategories(String... categoryIDs) { + return getCategories(new CodeQuery().setCategoryIDs(categoryIDs)); + } + + /**지정하는 아이디의 코드 분류를 가져온다. + * @param categoryID 코드 분류 아이디 + * @return 코드 분류 + */ + default CodeCategory getCategory(String categoryID) { + List categories = getCategories(categoryID); + return !categories.isEmpty() ? categories.get(0) : null; + } + /**코드 분류를 등록한다. + * @param category 코드 분류 + * @return 등록 여부 + *
  • 등록이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + int insertCategory(Map params); + + /**코드 분류를 등록한다. + * @param category 코드 분류 + * @return 등록 여부 + *
  • 등록이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default int create(CodeCategory category) { + DataObject params = params() + .set("category", category) + .set("currentUser", currentUser()); + + return insertCategory(params); + } + + int updateCategory(Map params); + + /**코드 분류를 수정한다. + * @param category 코드 분류 + * @return 수정 여부 + *
  • 수정이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default int update(CodeCategory category) { + DataObject params = params() + .set("category", category) + .set("currentUser", currentUser()); + + return updateCategory(params); + } + + int removeCategories(Map params); + + /**지정하는 아이디의 코드 분류들을 제거한다.
+ * 제거되는 코드 분류에 속하는 코드 그룹, 공통코드도 같이 제거한다. + * @param categoryIDs 코드 분류 아이디 + * @return 저장된 정보수 + */ + default int removeCategories(String... categoryIDs) { + if (isEmpty(categoryIDs)) return 0; + + removeGroups(categoryIDs, null); + return removeCategories(params().set("categoryIDs", categoryIDs)); + } + + /**코드 그룹 목록을 조회한다. + * @param pageNum 반환할 코드 그룹 목록의 페이지 번호 + * @param fetchSize 한 번에 반환할 코드 그룹의 갯수 + * @return + */ + List getGroupList(CodeQuery req); + + /**지정하는 아이디의 코드 그룹들을 가져온다. + * @param groupIDs 코드 그룹 아이디 + * @return 코드 그룹 + */ + List getGroups(CodeQuery req); + + default List getGroups(String... groupIDs) { + return getGroups(new CodeQuery().setGroupIDs(groupIDs)); + } + + /**지정하는 아이디의 코드 그룹을 가져온다. + * @param groupID 코드 그룹 아이디 + * @return 코드 그룹 + */ + default CodeGroup getGroup(String groupID) { + List groups = getGroups(groupID); + return !groups.isEmpty() ? groups.get(0) : null; + } + + int insertGroup(Map params); + + /**코드 그룹을 등록한다. + * @param codeGroup 코드 그룹 + * @return 등록 여부 + *
  • 등록이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default int create(CodeGroup codeGroup) { + DataObject params = params() + .set("group", codeGroup) + .set("currentUser", currentUser()); + + return insertGroup(params); + } + + int updateGroup(Map params); + + /**코드 그룹을 수정한다. + * @param codeGroup 코드 그룹 + * @return 수정 여부 + *
  • 수정이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default int update(CodeGroup codeGroup) { + DataObject params = params() + .set("group", codeGroup) + .set("currentUser", currentUser()); + + return updateGroup(params); + } + + int removeGroups(Map params); + + default int removeGroups(String[] categoryIDs, String[] groupIDs) { + if (isEmpty(categoryIDs) && isEmpty(groupIDs)) return 0; + + DataObject params = params() + .set("categoryIDs", ifEmpty(categoryIDs, () -> null)) + .set("groupIDs", ifEmpty(groupIDs, () -> null)); + return removeCodes(groupIDs, null) + + removeGroups(params); + } + + /**지정하는 아이디의 코드 그룹들을 제거한다.
+ * 제거되는 코드 그룹에 속하는 공통코드도 같이 제거한다. + * @param groupIDs 코드 그룹 아이디 + * @return 저장된 정보수 + */ + default int removeGroups(String... groupIDs) { + return removeGroups(null, groupIDs); + } + + /**지정하는 그룹의 공통코드 목록을 반환한다. + * @param groupID 코드 그룹 아이디 + * @param pageNum 반환할 공통코드 목록의 페이지 번호 + * @param fetchSize 한 번에 반환할 공통코드의 갯수 + * @return 공통코드 목록 + */ + List getCodeList(CodeQuery req); + + /**지정하는 그룹, 코드의 공통코드들을 반환한다.
+ * 공통코드를 지정하지 않으면 코드 그룹의 모든 공통코드를 반환한다. + * @param groupID 코드 그룹 아이디 + * @param codes 공통코드 + * @return 공통코드 + */ + List getCodes(CodeQuery req); + + /**지정하는 코드 그룹 아이디의 공통코드들을 가져와 그룹 아이디별로 분류하여 반환한다.
+ * 코드 그룹 아이디를 지정하지 않으면 모든 공통코드를 반환한다. + * @param groupIDs 코드 그룹 아이디 + * @return 그룹별 공통코드 + */ + default Map> getCodesOf(String... groupIDs) { + List codes = getCodes(new CodeQuery().setGroupIDs(groupIDs)); + return codes.stream().collect(Collectors.groupingBy(CommonCode::getGroupID)); + } + + /**지정하는 코드 그룹의 코드에 해당하는 공통코드를 가져온다. + * @param groupID 코드 그룹 아이디 + * @param code 코드 + * @return 공통코드 + */ + default CommonCode getCode(String groupID, String code) { + List codes = getCodes(new CodeQuery().setGroupIDs(groupID).setCodes(code)); + return !codes.isEmpty() ? codes.get(0) : null; + } + + int insertCode(Map params); + + /**공통코드를 등록한다. + * @param commonCode 공통코드 + * @return 등록 여부 + *
  • 등록이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default int create(CommonCode commonCode) { + DataObject params = params() + .set("code", commonCode) + .set("currentUser", currentUser()); + return insertCode(params); + } + + int updateCode(Map params); + + /**공통코드를 수정한다. + * @param commonCode 공통코드 + * @return 수정 여부 + *
  • 수정이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default int update(CommonCode commonCode) { + DataObject params = params() + .set("code", commonCode) + .set("currentUser", currentUser()); + + return updateCode(params); + } + + int reorderCodes(Map params); + + /**지정하는 코드 그룹의 공통코드들의 정렬 순서를 전달받은 순서대로 저장한다. + * @param groupID 코드 그룹 아이디 + * @param codes 공통코드 + * @return 저장된 정보수 + */ + default int reorderCodes(String groupID, String... codes) { + if (isEmpty(codes)) return 0; + return reorderCodes(params().set("groupID", groupID).set("codes", codes)); + } + + int removeCodes(Map params); + + default int removeCodes(String[] groupIDs, String[] codes) { + DataObject params = params() + .set("groupIDs", ifEmpty(groupIDs, () -> null)) + .set("codes", ifEmpty(codes, () -> null)); + + return removeCodes(params); + } + + /**지정하는 코드 그룹의 코드들을 제거한다.
+ * 코드를 지정하지 않으면 해당 그룹의 모든 공통코드들을 제거한다. + * @param groupID 코드 그룹 아이디 + * @param codes 코드 + * @return 저장된 정보수 + */ + default int removeCodes(String groupID, String... codes) { + return removeCodes(new String[] {groupID}, codes); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/dao/package-info.java b/src/main/java/cokr/xit/base/code/dao/package-info.java new file mode 100644 index 0000000..8270626 --- /dev/null +++ b/src/main/java/cokr/xit/base/code/dao/package-info.java @@ -0,0 +1,3 @@ +/**공통코드 테이블 접근 객체 + */ +package cokr.xit.base.code.dao; \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/package-info.java b/src/main/java/cokr/xit/base/code/package-info.java new file mode 100644 index 0000000..c221585 --- /dev/null +++ b/src/main/java/cokr/xit/base/code/package-info.java @@ -0,0 +1,11 @@ +/**공통코드 관리 모듈. + *

  • 공통코드는 다음과 같은 체계로 관리한다.
    + * 공통코드 분류체계
  • + *
  • 공통코드 정보는 데이터베이스의 다음 테이블에 저장하여 관리한다
    + * 공통코드 테이블
  • + *
+ *
  • 배포 모듈: xit-code-yy.mm.dd.jar
  • + *
  • 의존 모듈: {@link cokr.xit.foundation xit-foundation-yy.mm.dd.jar}
  • + *
+ */ +package cokr.xit.base.code; \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/service/CodeQuery.java b/src/main/java/cokr/xit/base/code/service/CodeQuery.java new file mode 100644 index 0000000..743e907 --- /dev/null +++ b/src/main/java/cokr/xit/base/code/service/CodeQuery.java @@ -0,0 +1,58 @@ +package cokr.xit.base.code.service; + +import cokr.xit.foundation.component.QueryRequest; + +public class CodeQuery extends QueryRequest { + private static final long serialVersionUID = 1L; + private String[] + categoryIDs, + groupIDs, + codes; + + /**코드 카테고리 아이디를 반환한다. + * @return 코드 카테고리 아이디 + */ + public String[] getCategoryIDs() { + return ifEmpty(categoryIDs, () -> null); + } + + /**코드 카테고리 아이디를 설정한다. + * @param categoryIDs 코드 카테고리 아이디 + * @return CodeQuery + */ + public T setCategoryIDs(String... categoryIDs) { + this.categoryIDs = categoryIDs; + return self(); + } + + /**코드그룹 아이디를 반환한다. + * @return 코드그룹 아이디 + */ + public String[] getGroupIDs() { + return ifEmpty(groupIDs, () -> null); + } + /**코드그룹 아이디를 설정한다. + * @param groupIDs 코드그룹 아이디 + * @return CodeQuery + */ + public T setGroupIDs(String... groupIDs) { + this.groupIDs = groupIDs; + return self(); + } + + /**코드를 반환한다. + * @return 코드 + */ + public String[] getCodes() { + return ifEmpty(codes, () -> null); + } + + /**코드를 설정한다. + * @param codes 코드 + * @return CodeQuery + */ + public T setCodes(String... codes) { + this.codes = codes; + return self(); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/service/CodeService.java b/src/main/java/cokr/xit/base/code/service/CodeService.java new file mode 100644 index 0000000..798d8f0 --- /dev/null +++ b/src/main/java/cokr/xit/base/code/service/CodeService.java @@ -0,0 +1,179 @@ +package cokr.xit.base.code.service; + +import java.util.List; +import java.util.Map; + +import cokr.xit.base.code.CodeCategory; +import cokr.xit.base.code.CodeGroup; +import cokr.xit.base.code.CommonCode; +import cokr.xit.foundation.data.DataObject; + +/**공통코드 서비스를 제공한다. + *
  • {@link #getCategoryList(int, int) 코드 분류 목록 조회}
  • + *
  • {@link #create(CodeCategory) 코드 분류 등록}
  • + *
  • {@link #update(CodeCategory) 코드 분류 수정}
  • + *
  • {@link #removeCategories(String...) 코드 분류 제거}
  • + *
  • {@link #getGroupList(int, int) 코드 그룹 목록 조회}
  • + *
  • {@link #create(CodeGroup) 코드 그룹 등록}
  • + *
  • {@link #update(CodeGroup) 코드 그룹 수정}
  • + *
  • {@link #removeGroups(String...) 코드 그룹 제거}
  • + *
  • {@link #getCodeList(String, int, int) 공통코드 목록 조회}
  • + *
  • {@link #getCodesOf(String...) 그룹별 공통코드 가져오기}
  • + *
  • {@link #create(CommonCode) 공통코드 등록}
  • + *
  • {@link #update(CommonCode) 공통코드 수정}
  • + *
  • {@link #removeCodes(String, String...) 공통코드 제거}
  • + *
+ * @author mjkhan + */ +public interface CodeService { + /**코드 분류 목록을 조회한다. + * @param pageNum 반환할 코드 분류 목록의 페이지 번호 + * @param fetchSize 한 번에 반환할 코드 분류의 갯수 + * @return 코드 분류 목록 + */ + List getCategoryList(CodeQuery req); + + /**지정하는 아이디의 코드 분류들을 가져온다. + * @param categoryIDs 코드 분류 아이디 + * @return 코드 분류 + */ + List getCategories(String... categoryIDs); + + /**지정하는 아이디의 코드 분류를 가져온다. + * @param categoryID 코드 분류 아이디 + * @return 코드 분류 + */ + CodeCategory getCategory(String categoryID); + + /**코드 분류를 등록한다. + * @param category 코드 분류 + * @return 등록 여부 + *
  • 등록이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + boolean create(CodeCategory category); + + /**코드 분류를 수정한다. + * @param category 코드 분류 + * @return 수정 여부 + *
  • 수정이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + boolean update(CodeCategory category); + + /**지정하는 아이디의 코드 분류들을 제거한다.
+ * 제거되는 코드 분류에 속하는 코드 그룹, 공통코드도 같이 제거한다. + * @param categoryIDs 코드 분류 아이디 + * @return 저장된 정보수 + */ + int removeCategories(String... categoryIDs); + + /**코드 그룹 목록을 조회한다. + * @param pageNum 반환할 코드 그룹 목록의 페이지 번호 + * @param fetchSize 한 번에 반환할 코드 그룹의 갯수 + * @return 코드 그룹 목록 + */ + List getGroupList(CodeQuery req); + + /**지정하는 아이디의 코드 그룹들을 가져온다. + * @param groupIDs 코드 그룹 아이디 + * @return 코드 그룹 + */ + List getGroups(String... groupIDs); + + /**지정하는 아이디의 코드 그룹을 가져온다. + * @param groupID 코드 그룹 아이디 + * @return 코드 그룹 + */ + CodeGroup getGroup(String groupID); + + /**코드 그룹을 등록한다. + * @param codeGroup 코드 그룹 + * @return 등록 여부 + *
  • 등록이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + boolean create(CodeGroup codeGroup); + + /**코드 그룹을 수정한다. + * @param codeGroup 코드 그룹 + * @return 수정 여부 + *
  • 수정이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + boolean update(CodeGroup codeGroup); + + /**지정하는 아이디의 코드 그룹들을 제거한다.
+ * 제거되는 코드 그룹에 속하는 공통코드도 같이 제거한다. + * @param groupIDs 코드 그룹 아이디 + * @return 저장된 정보수 + */ + int removeGroups(String... groupIDs); + + /**지정하는 그룹의 공통코드 목록을 반환한다. + * @param groupID 코드 그룹 아이디 + * @param pageNum 반환할 공통코드 목록의 페이지 번호 + * @param fetchSize 한 번에 반환할 공통코드의 갯수 + * @return 공통코드 목록 + */ + List getCodeList(CodeQuery req); + + /**지정하는 그룹, 코드의 공통코드들을 반환한다.
+ * 공통코드를 지정하지 않으면 코드 그룹의 모든 공통코드를 반환한다. + * @param groupID 코드 그룹 아이디 + * @param codes 공통코드 + * @return 공통코드 + */ + List getCodes(String groupID, String... codes); + + /**지정하는 코드 그룹 아이디의 공통코드들을 가져와 그룹 아이디별로 분류하여 반환한다.
+ * 코드 그룹 아이디를 지정하지 않으면 모든 공통코드를 반환한다. + * @param groupIDs 코드 그룹 아이디 + * @return 그룹별 공통코드 + */ + Map> getCodesOf(String... groupIDs); + + /**지정하는 코드 그룹의 코드에 해당하는 공통코드를 가져온다. + * @param groupID 코드 그룹 아이디 + * @param code 코드 + * @return 공통코드 + */ + CommonCode getCode(String groupID, String code); + + /**공통코드를 등록한다. + * @param commonCode 공통코드 + * @return 등록 여부 + *
  • 등록이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + boolean create(CommonCode commonCode); + + /**공통코드를 수정한다. + * @param commonCode 공통코드 + * @return 수정 여부 + *
  • 수정이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + boolean update(CommonCode commonCode); + + /**지정하는 코드 그룹의 공통코드들의 정렬 순서를 전달받은 순서대로 저장한다. + * @param groupID 코드 그룹 아이디 + * @param codes 공통코드 + * @return 저장된 정보수 + */ + int reorderCodes(String groupID, String... codes); + + /**지정하는 코드 그룹의 코드들을 제거한다.
+ * 코드를 지정하지 않으면 해당 그룹의 모든 공통코드들을 제거한다. + * @param groupID 코드 그룹 아이디 + * @param codes 코드 + * @return 저장된 정보수 + */ + int removeCodes(String groupID, String... codes); +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/service/bean/CodeBean.java b/src/main/java/cokr/xit/base/code/service/bean/CodeBean.java new file mode 100644 index 0000000..cc41e5e --- /dev/null +++ b/src/main/java/cokr/xit/base/code/service/bean/CodeBean.java @@ -0,0 +1,230 @@ +package cokr.xit.base.code.service.bean; + +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; + +import cokr.xit.base.code.CodeCategory; +import cokr.xit.base.code.CodeGroup; +import cokr.xit.base.code.CommonCode; +import cokr.xit.base.code.dao.CodeMapper; +import cokr.xit.base.code.service.CodeQuery; +import cokr.xit.foundation.AbstractComponent; +import cokr.xit.foundation.data.DataObject; + +/**공통코드 관리 Bean + * @author mjkhan + */ +@Component("codeBean") +public class CodeBean extends AbstractComponent { + @Resource(name = "codeMapper") + private CodeMapper codeMapper; + + /**코드 분류 목록을 조회한다. + * @param pageNum 반환할 코드 분류 목록의 페이지 번호 + * @param fetchSize 한 번에 반환할 코드 분류의 갯수 + * @return 코드 분류 목록 + */ + public List getCategoryList(CodeQuery req) { + return codeMapper.getCategoryList(req.setOrderBy("CTGR_ID")); + } + + /**지정하는 아이디의 코드 분류들을 가져온다. + * @param categoryIDs 코드 분류 아이디 + * @return 코드 분류 + */ + public List getCategories(String... categoryIDs) { + return codeMapper.getCategories(categoryIDs); + } + + /**지정하는 아이디의 코드 분류를 가져온다. + * @param categoryID 코드 분류 아이디 + * @return 코드 분류 + */ + public CodeCategory getCategory(String categoryID) { + return codeMapper.getCategory(categoryID); + } + + /**코드 분류를 등록한다. + * @param category 코드 분류 + * @return 등록 여부 + *
  • 등록이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean create(CodeCategory category) { + if (category == null) return false; + + if (getCategory(category.getId()) != null) + throw applicationException(null).setMessage(message("duplicate.object", "코드 카테고리")); + + return codeMapper.create(category) > 0; + } + + /**코드 분류를 수정한다. + * @param category 코드 분류 + * @return 수정 여부 + *
  • 수정이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean update(CodeCategory category) { + return category != null && codeMapper.update(category) > 0; + } + + /**지정하는 아이디의 코드 분류들을 제거한다.
+ * 제거되는 코드 분류에 속하는 코드 그룹, 공통코드도 같이 제거한다. + * @param categoryIDs 코드 분류 아이디 + * @return 저장된 정보수 + */ + public int removeCategories(String... categoryIDs) { + return codeMapper.removeCategories(categoryIDs); + } + + /**코드 그룹 목록을 조회한다. + * @param pageNum 반환할 코드 그룹 목록의 페이지 번호 + * @param fetchSize 한 번에 반환할 코드 그룹의 갯수 + * @return + */ + public List getGroupList(CodeQuery req) { + return codeMapper.getGroupList(req.setOrderBy("GRP_ID")); + } + + /**지정하는 아이디의 코드 그룹들을 가져온다. + * @param groupIDs 코드 그룹 아이디 + * @return 코드 그룹 + */ + public List getGroups(String... groupIDs) { + return codeMapper.getGroups(groupIDs); + } + + /**지정하는 아이디의 코드 그룹을 가져온다. + * @param groupID 코드 그룹 아이디 + * @return 코드 그룹 + */ + public CodeGroup getGroup(String groupID) { + return codeMapper.getGroup(groupID); + } + + /**코드 그룹을 등록한다. + * @param codeGroup 코드 그룹 + * @return 등록 여부 + *
  • 등록이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean create(CodeGroup codeGroup) { + if (codeGroup == null) return false; + + if (getGroup(codeGroup.getId()) != null) + throw applicationException(null).setMessage(message("duplicate.object", "코드 그룹")); + + return codeMapper.create(codeGroup) > 0; + } + + /**코드 그룹을 수정한다. + * @param codeGroup 코드 그룹 + * @return 수정 여부 + *
  • 수정이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean update(CodeGroup codeGroup) { + return codeGroup != null && codeMapper.update(codeGroup) > 0; + } + + /**지정하는 아이디의 코드 그룹들을 제거한다.
+ * 제거되는 코드 그룹에 속하는 공통코드도 같이 제거한다. + * @param groupIDs 코드 그룹 아이디 + * @return 저장된 정보수 + */ + public int removeGroups(String... groupIDs) { + return codeMapper.removeGroups(groupIDs); + } + + /**지정하는 그룹의 공통코드 목록을 반환한다. + * @param groupID 코드 그룹 아이디 + * @param pageNum 반환할 공통코드 목록의 페이지 번호 + * @param fetchSize 한 번에 반환할 공통코드의 갯수 + * @return 공통코드 목록 + */ + public List getCodeList(CodeQuery req) { + return codeMapper.getCodeList(req.setOrderBy("GRP_ID, SRT_ORD, CODE")); + } + + /**지정하는 그룹, 코드의 공통코드들을 반환한다.
+ * 공통코드를 지정하지 않으면 코드 그룹의 모든 공통코드를 반환한다. + * @param groupID 코드 그룹 아이디 + * @param codes 공통코드 + * @return 공통코드 + */ + public List getCodes(String groupID, String... codes) { + return codeMapper.getCodes(new CodeQuery().setGroupIDs(groupID).setCodes(codes)); + } + + /**지정하는 코드 그룹 아이디의 공통코드들을 가져와 그룹 아이디별로 분류하여 반환한다.
+ * 코드 그룹 아이디를 지정하지 않으면 모든 공통코드를 반환한다. + * @param groupIDs 코드 그룹 아이디 + * @return 그룹별 공통코드 + */ + public Map> getCodesOf(String... groupIDs) { + return codeMapper.getCodesOf(groupIDs); + } + + /**지정하는 코드 그룹의 코드에 해당하는 공통코드를 가져온다. + * @param groupID 코드 그룹 아이디 + * @param code 코드 + * @return 공통코드 + */ + public CommonCode getCode(String groupID, String code) { + return codeMapper.getCode(groupID, code); + } + + /**공통코드를 등록한다. + * @param commonCode 공통코드 + * @return 등록 여부 + *
  • 등록이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean create(CommonCode commonCode) { + if (commonCode == null) return false; + if (getCode(commonCode.getGroupID(), commonCode.getCode()) != null) + throw applicationException(null).setMessage(message("duplicate.object", "공통코드")); + + return codeMapper.create(commonCode) > 0; + } + + /**공통코드를 수정한다. + * @param commonCode 공통코드 + * @return 수정 여부 + *
  • 수정이 됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean update(CommonCode commonCode) { + return commonCode != null && codeMapper.update(commonCode) > 0; + } + + /**지정하는 코드 그룹의 공통코드들의 정렬 순서를 전달받은 순서대로 저장한다. + * @param groupID 코드 그룹 아이디 + * @param codes 공통코드 + * @return 저장된 정보수 + */ + public int reorderCodes(String groupID, String... codes) { + return codeMapper.reorderCodes(groupID, codes); + } + + /**지정하는 코드 그룹의 코드들을 제거한다.
+ * 코드를 지정하지 않으면 해당 그룹의 모든 공통코드들을 제거한다. + * @param groupID 코드 그룹 아이디 + * @param codes 코드 + * @return 저장된 정보수 + */ + public int removeCodes(String groupID, String... codes) { + return codeMapper.removeCodes(groupID, codes); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/service/bean/CodeServiceBean.java b/src/main/java/cokr/xit/base/code/service/bean/CodeServiceBean.java new file mode 100644 index 0000000..da1d1b7 --- /dev/null +++ b/src/main/java/cokr/xit/base/code/service/bean/CodeServiceBean.java @@ -0,0 +1,126 @@ +package cokr.xit.base.code.service.bean; + +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import cokr.xit.base.code.CodeCategory; +import cokr.xit.base.code.CodeGroup; +import cokr.xit.base.code.CommonCode; +import cokr.xit.base.code.service.CodeQuery; +import cokr.xit.base.code.service.CodeService; +import cokr.xit.foundation.component.AbstractServiceBean; +import cokr.xit.foundation.data.DataObject; + +/**공통코드 서비스 인터페이스의 구현체 + * @author mjkhan + */ +@Service("codeService") +public class CodeServiceBean extends AbstractServiceBean implements CodeService { + /** 공통코드 관리 Bean */ + @Resource(name="codeBean") + protected CodeBean codeBean; + + @Override + public List getCategoryList(CodeQuery req) { + return codeBean.getCategoryList(req); + } + + @Override + public List getCategories(String... categoryIDs) { + return codeBean.getCategories(categoryIDs); + } + + @Override + public CodeCategory getCategory(String categoryID) { + return codeBean.getCategory(categoryID); + } + + @Override + public boolean create(CodeCategory category) { + return codeBean.create(category); + } + + @Override + public boolean update(CodeCategory category) { + return codeBean.update(category); + } + + @Override + public int removeCategories(String... categoryIDs) { + return codeBean.removeCategories(categoryIDs); + } + + @Override + public List getGroupList(CodeQuery req) { + return codeBean.getGroupList(req); + } + + @Override + public List getGroups(String... groupIDs) { + return codeBean.getGroups(groupIDs); + } + + @Override + public CodeGroup getGroup(String groupID) { + return codeBean.getGroup(groupID); + } + + @Override + public boolean create(CodeGroup codeGroup) { + return codeBean.create(codeGroup); + } + + @Override + public boolean update(CodeGroup codeGroup) { + return codeBean.update(codeGroup); + } + + @Override + public int removeGroups(String... groupIDs) { + return codeBean.removeGroups(groupIDs); + } + + @Override + public List getCodeList(CodeQuery req) { + return codeBean.getCodeList(req); + } + + @Override + public List getCodes(String groupID, String... codes) { + return codeBean.getCodes(groupID, codes); + } + + @Override + public Map> getCodesOf(String... groupIDs) { + return codeBean.getCodesOf(groupIDs); + } + + @Override + public CommonCode getCode(String groupID, String code) { + return codeBean.getCode(groupID, code); + } + + @Override + public boolean create(CommonCode commonCode) { + return codeBean.create(commonCode); + } + + @Override + public boolean update(CommonCode commonCode) { + return codeBean.update(commonCode); + } + + @Override + public int reorderCodes(String groupID, String... codes) { + return codeBean.reorderCodes(groupID, codes); + } + + @Override + public int removeCodes(String groupID, String... codes) { + return codeBean.removeCodes(groupID, codes); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/service/bean/package-info.java b/src/main/java/cokr/xit/base/code/service/bean/package-info.java new file mode 100644 index 0000000..56b7361 --- /dev/null +++ b/src/main/java/cokr/xit/base/code/service/bean/package-info.java @@ -0,0 +1,3 @@ +/**공통코드 서비스 구현부 + */ +package cokr.xit.base.code.service.bean; \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/service/package-info.java b/src/main/java/cokr/xit/base/code/service/package-info.java new file mode 100644 index 0000000..78794e0 --- /dev/null +++ b/src/main/java/cokr/xit/base/code/service/package-info.java @@ -0,0 +1,3 @@ +/**공통코드 서비스 인터페이스 + */ +package cokr.xit.base.code.service; \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/web/CodeController.java b/src/main/java/cokr/xit/base/code/web/CodeController.java new file mode 100644 index 0000000..d6198b6 --- /dev/null +++ b/src/main/java/cokr/xit/base/code/web/CodeController.java @@ -0,0 +1,319 @@ +package cokr.xit.base.code.web; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +import cokr.xit.base.code.CodeCategory; +import cokr.xit.base.code.CodeGroup; +import cokr.xit.base.code.CommonCode; +import cokr.xit.base.code.service.CodeQuery; +import cokr.xit.base.code.service.CodeService; +import cokr.xit.foundation.data.DataObject; +import cokr.xit.foundation.web.AbstractController; + +/**공통코드 서비스 웹 컨트롤러.
+ * {웹 컨텍스트}/code/*로 접근할 수 있다. + * @author mjkhan + */ +@RequestMapping(name="공통코드", value="/code") +public class CodeController extends AbstractController { + @Resource(name="codeService") + private CodeService codeService; + + /**공통코드 서비스를 반환한다. + * @return 공통코드 서비스 + */ + protected CodeService codeService() { + return codeService; + } + + /**공통코드 관리 메인화면(code/code-main)을 연다. + * @return ModelAndView + */ + @RequestMapping(name="공통코드 메인", value="/main.do") + public ModelAndView main() { + return new ModelAndView("base/code/code-main"); + } + + /**코드 분류 목록을 조회한다. + * @param pageNum 페이지 번호 + * @param fetchSize 한 번에 가져올 코드 분류의 갯수 + * @return 코드 분류 목록 + *
{
+	 *     "categoryList": [...]
+	 * }
+ */ + @RequestMapping(name="코드 분류 목록", value="/category/list.do") + public ModelAndView getCategoryList(CodeQuery req) { + setFetchSize(req); + return setCollectionInfo( + new ModelAndView("jsonView"), + codeService.getCategoryList(req), + "category" + ); + } + + /**코드 분류 정보를 조회한다. + * @param categoryID 카테고리 아이디 + * @return 코드 분류 정보 + *
{
+	 *     "categoryInfo": [...]
+	 * }
+ */ + @RequestMapping(name="코드 분류 정보", value="/category/info.do") + public ModelAndView getCategoryInfo(String categoryID) { + ModelAndView mav = new ModelAndView("base/code/category-info"); + if (!isEmpty(categoryID)) { + List list = codeService.getCategoryList(new CodeQuery().setCategoryIDs(categoryID)); + if (!list.isEmpty()) + mav.addObject("categoryInfo", list.get(0)); + } + return mav; + } + + /**코드 분류를 등록한다. + * @param category 코드 분류 + * @return 등록 여부 + *
{
+	 *     "saved": true || false
+	 * }
+ */ + @PostMapping(name="코드 분류 등록", value="/category/create.do") + public ModelAndView create(CodeCategory category) { + return new ModelAndView("jsonView") + .addObject("saved", codeService.create(category)); + } + + /**코드 분류를 수정한다. + * @param category 코드 분류 + * @return 수정 여부 + *
{
+	 *     "saved": true || false
+	 * }
+ */ + @PostMapping(name="코드 분류 수정", value="/category/update.do") + public ModelAndView update(CodeCategory category) { + return new ModelAndView("jsonView") + .addObject("saved", codeService.update(category)); + } + + /**지정하는 아이디의 코드 분류들을 제거한다.
+ * 제거되는 코드 분류에 속하는 코드 그룹, 공통코드도 같이 제거한다. + * @param categoryIDs 코드 분류 아이디 + * @return 저장된 정보수 + *
{
+	 *     "affected": 1,
+	 *     "saved": true || false
+	 * }
+ */ + @PostMapping(name="코드 분류 삭제", value="/category/remove.do") + public ModelAndView removeCategories(String... categoryIDs) { + int affected = codeService.removeGroups(categoryIDs); + return new ModelAndView("jsonView") + .addObject("affected", affected) + .addObject("saved", affected > 0); + } + + /**코드 그룹 목록을 조회한다. + * @param pageNum 반환할 코드 그룹 목록의 페이지 번호 + * @param fetchSize 한 번에 반환할 코드 그룹의 갯수 + * @return 코드 그룹 목록 + *
{
+	 *     "groupList": [...]
+	 * }
+ */ + @RequestMapping(name="코드 그룹 목록", value="/group/list.do") + public ModelAndView getGroupList(CodeQuery req) { + setFetchSize(req); + return setCollectionInfo( + new ModelAndView("jsonView"), + codeService.getGroupList(req), + "group" + ); + } + + /**코드 그룹 정보를 조회한다. + * @param groupID 그룹 아이디 + * @return 코드 그룹 정보 + *
{
+	 *     "groupInfo": {...}
+	 * }
+ */ + @RequestMapping(name="코드 그룹 목록", value="/group/info.do") + public ModelAndView getGroupInfo(String groupID) { + ModelAndView mav = new ModelAndView("base/code/group-info"); + if (!isEmpty(groupID)) { + List list = codeService.getCodeList(new CodeQuery().setGroupIDs(groupID)); + if (!list.isEmpty()) + mav.addObject("groupInfo", list.get(0)); + } + return mav; + } + + /**코드 그룹을 등록한다. + * @param group 코드 그룹 + * @return 등록 여부 + *
{
+	 *     "saved": true || false
+	 * }
+ */ + @PostMapping(name="코드 그룹 등록", value="/group/create.do") + public ModelAndView create(CodeGroup group) { + return new ModelAndView("jsonView") + .addObject("saved", codeService.create(group)); + } + + /**코드 그룹을 수정한다. + * @param group 코드 그룹 + * @return 수정 여부 + *
{
+	 *     "saved": true || false
+	 * }
+ */ + @PostMapping(name="코드 그룹 수정", value="/group/update.do") + public ModelAndView update(CodeGroup group) { + return new ModelAndView("jsonView") + .addObject("saved", codeService.update(group)); + } + + /**지정하는 아이디의 코드 그룹들을 제거한다.
+ * 제거되는 코드 그룹에 속하는 공통코드도 같이 제거한다. + * @param groupIDs 코드 그룹 아이디 + * @return 저장된 정보수 + *
{
+	 *     "affected": 1,
+	 *     "saved": true || false
+	 * }
+ */ + @PostMapping(name="코드 그룹 제거", value="/group/remove.do") + public ModelAndView removeGroups(String... groupIDs) { + int affected = codeService.removeGroups(groupIDs); + return new ModelAndView("jsonView") + .addObject("affected", affected) + .addObject("saved", affected > 0); + } + + /**지정하는 코드 그룹 아이디의 공통코드들을 가져와 그룹 아이디별로 분류하여 반환한다.
+ * 코드 그룹 아이디를 지정하지 않으면 모든 공통코드를 반환한다. + * @param groupIDs 코드 그룹 아이디 + * @return 그룹별 공통코드 + *
{
+	 *     "코드그룹0": [...], // 그룹0의 공통코드 목록
+	 *     "코드그룹1": [...], // 그룹1의 공통코드 목록
+	 *     ...
+	 * }
+ */ + @RequestMapping(name="그룹별 코드 가져오기", value="/get.do") + public ModelAndView getCodesOf(String... groupIDs) { + return new ModelAndView("jsonView") + .addAllObjects(codeService.getCodesOf(groupIDs)); + } + + /**지정하는 그룹의 공통코드 목록을 반환한다. + * @param groupID 코드 그룹 아이디 + * @param pageNum 반환할 공통코드 목록의 페이지 번호 + * @param fetchSize 한 번에 반환할 공통코드의 갯수 + * @return 공통코드 목록 + *
{
+	 *     "groupID": "코드그룹0",
+	 *     "codeList": [...], // 그룹0의 공통코드 목록
+	 *     "codeStart": 0, // 공통코드 시작 위치
+	 *     "codeFetch": 10, // 한 번에 반환하는 공통코드 갯수
+	 *     "codeTotal": 50, // 조회 결과 공통코드 전체 갯수
+	 * }
+ */ + @RequestMapping(name="그룹별 코드 목록", value="/list.do") + public ModelAndView getCodes(CodeQuery req) { + setFetchSize(req); + return setCollectionInfo( + new ModelAndView("jsonView"), + codeService.getCodeList(req), + "code" + ); + } + + /**지정하는 그룹의 공통코드 정보를 반환한다. + * @param groupID 코드 그룹 아이디 + * @param code 코드 + * @return 공통코드 정보 + *
{
+	 *     "codeInfo": {...}
+	 * }
+ */ + @RequestMapping(name="그룹별 코드 목록", value="/info.do") + public ModelAndView getCodeInfo(String groupID, String code) { + ModelAndView mav = new ModelAndView("base/code/code-info"); + if (!isEmpty(groupID) && !isEmpty(code)) { + List list = codeService.getCodeList(new CodeQuery().setGroupIDs(groupID).setCodes(code)); + if (!list.isEmpty()) + mav.addObject("codeInfo", list.get(0)); + } + return mav; + } + + /**공통코드를 등록한다. + * @param commonCode 공통코드 + * @return 등록 여부 + *
{
+	 *     "saved": true || false
+	 * }
+ */ + @PostMapping(name="코드 등록", value="/create.do") + public ModelAndView create(CommonCode commonCode) { + return new ModelAndView("jsonView") + .addObject("saved", codeService.create(commonCode)); + } + + /**공통코드를 수정한다. + * @param commonCode 공통코드 + * @return 수정 여부 + *
{
+	 *     "saved": true || false
+	 * }
+ */ + @PostMapping(name="코드 수정", value="/update.do") + public ModelAndView update(CommonCode commonCode) { + return new ModelAndView("jsonView") + .addObject("saved", codeService.update(commonCode)); + } + + /**지정하는 코드 그룹의 공통코드들의 정렬 순서를 전달받은 순서대로 저장한다. + * @param groupID 코드 그룹 아이디 + * @param codes 공통코드 + * @return 저장된 정보수 + *
{
+	 *     "affected": 저장된 정보수,
+	 *     "saved": true || false
+	 * }
+ */ + @PostMapping(name="코드 순서", value="/reorder.do") + public ModelAndView reorderCodes(String groupID, String... codes) { + int affected = codeService.reorderCodes(groupID, codes); + return new ModelAndView("jsonView") + .addObject("affected", affected) + .addObject("saved", affected > 0); + } + + /**지정하는 코드 그룹의 코드들을 제거한다.
+ * 코드를 지정하지 않으면 해당 그룹의 모든 공통코드들을 제거한다. + * @param groupID 코드 그룹 아이디 + * @param codes 코드 + * @return 저장된 정보수 + *
{
+	 *     "affected": 저장된 정보수,
+	 *     "saved": true || false
+	 * }
+ */ + @PostMapping(name="코드 제거", value="/remove.do") + public ModelAndView removeCodes(String groupID, String... codes) { + int affected = codeService.removeCodes(groupID, codes); + return new ModelAndView("jsonView") + .addObject("affected", affected) + .addObject("saved", affected > 0); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/code/web/package-info.java b/src/main/java/cokr/xit/base/code/web/package-info.java new file mode 100644 index 0000000..fa2b836 --- /dev/null +++ b/src/main/java/cokr/xit/base/code/web/package-info.java @@ -0,0 +1,3 @@ +/**공통코드 서비스 웹 컨트롤러 + */ +package cokr.xit.base.code.web; \ No newline at end of file diff --git a/src/test/java/cokr/xit/base/code/service/CodeServiceTest.java b/src/test/java/cokr/xit/base/code/service/CodeServiceTest.java new file mode 100644 index 0000000..55538c4 --- /dev/null +++ b/src/test/java/cokr/xit/base/code/service/CodeServiceTest.java @@ -0,0 +1,150 @@ +package cokr.xit.base.code.service; + +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import cokr.xit.base.code.CodeCategory; +import cokr.xit.base.code.CodeGroup; +import cokr.xit.base.code.CommonCode; +import cokr.xit.foundation.test.TestSupport; + +public class CodeServiceTest extends TestSupport { + @Resource(name="codeService") + private CodeService service; + + @Test + public void getCategories() { + CodeQuery req = new CodeQuery(); + service.getCategoryList(req); + service.getCategoryList(req.setPageNum(1).setFetchSize(10)); + service.getCategories("ctgr-0", "ctgr-1"); + service.getCategory("ctgr-0"); + } + + @Test + public void saveCategory() { + String categoryID = "ctgr-0"; + CodeCategory category = new CodeCategory(); + category.setId(categoryID); + category.setName("카테고리 0"); + service.create(category); + + CodeCategory loaded = service.getCategory(categoryID); + Assertions.assertNotNull(loaded); + loaded.setDescription("카테고리 영"); + Assertions.assertTrue(service.update(loaded)); + + service.removeCategories(categoryID); + loaded = service.getCategory(categoryID); + Assertions.assertNull(loaded); + + deleteCategory(categoryID); + } + + @Test + public void getGroups() { + CodeQuery req = new CodeQuery(); + service.getGroupList(req); + service.getGroupList(req.setPageNum(1).setFetchSize(10)); + service.getGroups(); + service.getGroup("group-0"); + } + + @Test + public void saveGroup() { + String groupID = "grp-00"; + CodeGroup group = new CodeGroup(); + group.setId(groupID); + group.setName(groupID + " name"); + Assertions.assertTrue(service.create(group)); + + CodeGroup loaded = service.getGroup(groupID); + Assertions.assertNotNull(loaded); + + group.setName(groupID + " 이름"); + group.setDescription(groupID + " 설명"); + Assertions.assertTrue(service.update(group)); + + loaded = service.getGroup(groupID); + Assertions.assertNotNull(loaded); + Assertions.assertEquals(group.getName(), loaded.getName()); + Assertions.assertEquals(group.getDescription(), loaded.getDescription()); + + service.removeGroups(groupID); + loaded = service.getGroup(groupID); + Assertions.assertNull(loaded); + + deleteGroup(groupID); + } + + private CommonCode createCode(String groupID, String code) { + CommonCode code0 = new CommonCode(); + code0.setGroupID(groupID); + code0.setCode(code); + code0.setValue(code + " value"); + service.create(code0); + return code0; + } + + @Test + public void saveCodes() { + //req.setPageNum(1).setFetchSize(10) + String groupID = "grp-0"; + CodeQuery req = new CodeQuery().setGroupIDs(groupID); + CommonCode commonCode = createCode(groupID, "code-0"); + + Assertions.assertFalse(service.getCodeList(req).isEmpty()); + Assertions.assertFalse(service.getCodeList(req.setPageNum(1).setFetchSize(10)).isEmpty()); + Assertions.assertFalse(service.getCodes(groupID).isEmpty()); + + CommonCode loaded = service.getCode(groupID, commonCode.getCode()); + Assertions.assertNotNull(loaded); + + commonCode.setValue("코드값 0"); + commonCode.setEtc1("기타 1"); + commonCode.setEtc2("기타 2"); + commonCode.setEtc3("기타 3"); + Assertions.assertTrue(service.update(commonCode)); + + loaded = service.getCode(groupID, commonCode.getCode()); + Assertions.assertNotNull(loaded); + Assertions.assertEquals(commonCode.getValue(), loaded.getValue()); + Assertions.assertEquals(commonCode.getEtc1(), loaded.getEtc1()); + Assertions.assertEquals(commonCode.getEtc2(), loaded.getEtc2()); + Assertions.assertEquals(commonCode.getEtc3(), loaded.getEtc3()); + + CommonCode commonCode1 = createCode(groupID, "code-1"); + CommonCode commonCode2 = createCode(groupID, "code-2"); + Map> byGroup = service.getCodesOf(groupID); + System.out.println(byGroup); + + String[] codes = {commonCode2.getCode(), commonCode1.getCode(), commonCode.getCode()}; + Assertions.assertTrue(service.reorderCodes(groupID, codes) > 0); + List commonCodes = service.getCodes(groupID); + for (int i = 0; i < commonCodes.size(); ++i) { + Assertions.assertEquals(codes[i], commonCodes.get(i).getCode()); + } + + Assertions.assertTrue(service.removeCodes(groupID, codes) > 0); + Assertions.assertTrue(service.getCodes(groupID).isEmpty()); + + deleteCode(groupID); + } + + private void deleteCategory(String categoryID) { + testDao.execDelete("DELETE FROM TBL_CODE_CTGR WHERE CTGR_ID = '" + categoryID + "'"); + } + + private void deleteGroup(String groupID) { + testDao.execDelete("DELETE FROM TBL_CODE_GRP WHERE GRP_ID = '" + groupID + "'"); + } + + private void deleteCode(String groupID) { + testDao.execDelete("DELETE FROM TBL_CMN_CODE WHERE GRP_ID = '" + groupID + "'"); + } +} \ No newline at end of file diff --git a/src/test/resources/log4j2.xml b/src/test/resources/log4j2.xml new file mode 100644 index 0000000..30db4b4 --- /dev/null +++ b/src/test/resources/log4j2.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/log4jdbc.log4j2.properties b/src/test/resources/log4jdbc.log4j2.properties new file mode 100644 index 0000000..3b8ff2b --- /dev/null +++ b/src/test/resources/log4jdbc.log4j2.properties @@ -0,0 +1,4 @@ +log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator + +log4jdbc.dump.sql.maxlinelength=0 +log4jdbc.drivers=org.mariadb.jdbc.Driver diff --git a/src/test/resources/lombok.config b/src/test/resources/lombok.config new file mode 100644 index 0000000..0a8874c --- /dev/null +++ b/src/test/resources/lombok.config @@ -0,0 +1,2 @@ +# see https://projectlombok.org/features/constructor lombok.copyableAnnotations +lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier diff --git a/src/test/resources/message/authentication-message.properties b/src/test/resources/message/authentication-message.properties new file mode 100644 index 0000000..a043355 --- /dev/null +++ b/src/test/resources/message/authentication-message.properties @@ -0,0 +1,5 @@ +authenticationFailure.usernameNotFound=\uc0ac\uc6a9\uc790\ub97c \ucc3e\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. +authenticationFailure.badCredentials=\uc0ac\uc6a9\uc790 \uc544\uc774\ub514\ub098 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub410\uc2b5\ub2c8\ub2e4. +authenticationFailure.credentialsExpired=\ube44\ubc00\ubc88\ud638\uac00 \ub9cc\ub8cc\ub410\uc2b5\ub2c8\ub2e4. +authenticationFailure.authenticationFailed=\uc0ac\uc6a9\uc790\ub97c \uc778\uc99d\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. +authenticationFailure.policyViolated=\ub85c\uadf8\uc778 \uc815\ucc45\uc5d0 \ub530\ub77c \uc811\uadfc\uc774 \ucc28\ub2e8\ub410\uc2b5\ub2c8\ub2e4. \ No newline at end of file diff --git a/src/test/resources/message/message-common.properties b/src/test/resources/message/message-common.properties new file mode 100644 index 0000000..02e921c --- /dev/null +++ b/src/test/resources/message/message-common.properties @@ -0,0 +1,382 @@ +valueRequired={0}\uac00 \uc124\uc815\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. + +pageNotFound=\uc694\uccad\ud558\uc2e0 \ud398\uc774\uc9c0\ub97c \ucc3e\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. +sessionExpired=\uc138\uc158\uc774 \ub9cc\ub8cc\ub410\uc2b5\ub2c8\ub2e4. + +duplicate.object=\uc774\ubbf8 \ub4f1\ub85d\ub41c {0}\uc785\ub2c8\ub2e4. + +fail.common.msg=\uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4! +fail.common.sql=sql \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4! error code: {0}, error msg: {1} +info.nodata.msg=\ud574\ub2f9 \ub370\uc774\ud130\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. + +#UI Common resource# +table.num=\ubc88\ud638 +table.regdate=\ub4f1\ub85d\uc77c +table.reger=\ub4f1\ub85d\uc790 +table.select=\uc120\ud0dd +title.html=egovframe common component +title.detail=\uc0c1\uc138\uc870\ud68c +title.inquire=\uc870\ud68c +title.update=\uc218\uc815 +title.create=\ub4f1\ub85d +title.delete=\uc0ad\uc81c +title.save=\uc800\uc7a5 +title.list=\ubaa9\ub85d +title.searchCondition=\uac80\uc0c9\uc870\uac74 +title.search=\uac80\uc0c9\uc5b4 +title.reply=\ub2f5\uae00 +title.scrap=\uc2a4\ud06c\ub7a9 +title.comment=\ub313\uae00 +title.attachedFileSelect=\ud30c\uc77c\uc120\ud0dd +title.attachedFileDelete=\ud30c\uc77c\uc0ad\uc81c +title.link=\ub9c1\ud06c +title.management=\uad00\ub9ac +title.all=\uc804\uccb4 + +input.select=\uc120\ud0dd\ud558\uc138\uc694 +input.cSelect=\uc120\ud0dd +input.input=\uc785\ub825 +input.button=\ubc84\ud2bc +input.selectAll.title=\uc804\uccb4\uc120\ud0dd\uccb4\ud06c\ubc15\uc2a4 +input.yes=\uc608 +input.no=\uc544\ub2c8\uc624 + +select.searchCondition=\uc870\ud68c\uc870\uac74 \uc120\ud0dd + +button.select=\uc120\ud0dd +button.search=\uac80\uc0c9 +button.use=\uc0ac\uc6a9 +button.notUsed=\uc0ac\uc6a9\uc911\uc9c0 +button.inquire=\uc870\ud68c +button.update=\uc218\uc815 +button.create=\ub4f1\ub85d +button.delete=\uc0ad\uc81c +button.deleteDatabase=\uc644\uc804\uc0ad\uc81c +button.close=\ub2eb\uae30 +button.save=\uc800\uc7a5 +button.list=\ubaa9\ub85d +button.reset=\ucde8\uc18c +button.passwordUpdate=\uc554\ud638\ubcc0\uacbd +button.subscribe=\uac00\uc785\uc2e0\uccad +button.realname=\uc2e4\uba85\ud655\uc778 +button.moveToGpin=GPIN\uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9 +button.moveToIhidnum=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638 \uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9 +button.agree=\ub3d9\uc758 +button.disagree=\ube44\ub3d9\uc758 +button.possible=\uac00\ub2a5 +button.impossible=\ubd88\uac00\ub2a5 +button.qnaregist=Q&A\ub4f1\ub85d +button.cnsltregist=\uc0c1\ub2f4\ub4f1\ub85d +button.preview=\ubbf8\ub9ac\ubcf4\uae30 +button.next=\ub2e4\uc74c +button.add=\ubc14\ub85c\ucd94\uac00 +button.confirm=\ud655\uc778 +button.back = \ub4a4\ub85c +button.yes = \uc608 +button.no = \uc544\ub2c8\uc624 +button.home = \ud648 +button.user = \uc0ac\uc6a9\uc790\uc9c0\uc6d0 +button.cop = \ud611\uc5c5 +button.wrkstart = \ucd9c\uadfc +button.wrkend = \ud1f4\uadfc +button.reply = \ub2f5\uae00 +button.scrap = \uc2a4\ud06c\ub7a9 +button.comment = \ub313\uae00 +button.excel = \uc5d1\uc140 +button.init=\ucd08\uae30\ud654 +button.acknowledgment=\uc2b9\uc778 +button.cancelAcknowledgment=\uc2b9\uc778\ucde8\uc18c +button.bulkUpload=\uc77c\uad04\ub4f1\ub85d +button.log = \ub85c\uadf8 +button.set = \uc124\uc815 +button.move = \uc774\ub3d9 + + +#UI Common Message# +common.noScriptTitle.msg=\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c\ub294 \uc77c\ubd80 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc2e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +common.searchCondition.msg=\uc774 \ub808\uc774\uc544\uc6c3\uc740 \ud558\ub2e8 \uc815\ubcf4\ub97c \ub300\ud55c \uac80\uc0c9 \uc815\ubcf4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. + +common.summary.list={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \ubaa9\ub85d\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4. +common.summary.regist={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \ub4f1\ub85d\ud55c\ub2e4. +common.summary.update={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc218\uc815\ud55c\ub2e4. +common.summary.inqire={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \uc0c1\uc138\uc870\ud68c \ub0b4\uc5ed\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4. + +common.save.msg=\uc800\uc7a5\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.regist.msg=\ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.delete.msg=\uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.update.msg=\uc218\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.nodata.msg=\uc790\ub8cc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\ub978 \uac80\uc0c9\uc870\uac74\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694 +common.required.msg=(\uc740)\ub294 \ud544\uc218\uc785\ub825\ud56d\ubaa9\uc785\ub2c8\ub2e4. +common.acknowledgement.msg=\uc2b9\uc778\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.acknowledgementcancel.msg=\uc2b9\uc778\ucde8\uc18c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.nocomment.msg=\ub313\uae00\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. +common.noguest.msg=\uc791\uc131\ub41c \ubc29\uba85\ub85d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. + +success.request.msg = \uc694\uccad\ucc98\ub9ac\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc218\ud589\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +success.common.select=\uc815\uc0c1\uc801\uc73c\ub85c \uc870\ud68c\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +success.common.insert=\uc815\uc0c1\uc801\uc73c\ub85c \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +success.common.update=\uc815\uc0c1\uc801\uc73c\ub85c \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +success.common.delete=\uc815\uc0c1\uc801\uc73c\ub85c \uc0ad\uc81c\ub418\uc5c8\uc2b5\ub2c8\ub2e4. + +common.imposbl.fileupload = \ub354 \uc774\uc0c1 \ud30c\uc77c\uc744 \ucca8\ubd80\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +common.isConfmDe.msg=\uc2b9\uc778\uc77c\uc790\ub97c \ud655\uc778 \ubc14\ub78d\ub2c8\ub2e4. +common.isExist.msg = \uc774\ubbf8 \uc874\uc7ac\ud558\uac70\ub098 \uacfc\uac70\uc5d0 \ub4f1\ub85d\uc774 \ub418\uc5c8\ub358 \uc0c1\ud0dc\uc785\ub2c8\ub2e4. + +fail.common.insert = \uc0dd\uc131\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.update = \uc218\uc815\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.delete = \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.delete.upperMenuExist = \ucc38\uc870\ub418\ub294 \uba54\ub274\uac00 \uc788\uc5b4 \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.select = \uc870\ud68c\uc5d0 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.login = \ub85c\uadf8\uc778 \uc815\ubcf4\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +fail.common.loginIncorrect = {0}\ud68c \uc774\uc0c1 \ub85c\uadf8\uc778 \uc811\uc18d\uc774 \uc2dc\ub3c4 \ub418\uc5b4 \uacc4\uc815\uc774 \uc7a0\uaca8\uc2b5\ub2c8\ub2e4! +fail.common.login.password = \ud328\uc2a4\uc6cc\ub4dc \uc790\ub9ac \uc218\uac00 \uc77c\uce58 \ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.(8\uc790\ub9ac \uc774\uc0c1 20\uc790\ub9ac \uc774\ud558) +fail.common.idsearch = \uc544\uc774\ub514\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +fail.common.pwsearch = \ube44\ubc00\ubc88\ud638\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +fail.request.msg = \uc694\uccad\ucc98\ub9ac\ub97c \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.login.ip = \ub4f1\ub85d\ub41c IP\uac00 \uc544\ub2c8\ubbc0\ub85c \ub85c\uadf8\uc778\uc774 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4. + +#UI User Message# +fail.user.passwordUpdate1=\ud604\uc7ac \ube44\ubc00\ubc88\ud638\uac00 \ub9de\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +fail.user.passwordUpdate2=\ube44\ubc00\ubc88\ud638\uc640 \ube44\ubc00\ubc88\ud638 \ud655\uc778\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +info.user.rlnmCnfirm=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624. +success.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4. +fail.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +fail.user.connectFail=\uc2dc\uc2a4\ud15c \uc7a5\uc560\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.(\uc778\uc99d\uc11c\ubc84 \uc5f0\uacb0 \uc2e4\ud328) +info.user.rlnmPinCnfirm=\uacf5\uacf5 \uc544\uc774\ud540 \uc544\uc774\ub514\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624. +success.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4. +fail.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. + + +#UI Cop Message# +cop.extrlUser = \uc678\ubd80\uc0ac\uc6a9\uc790 +cop.intrlUser = \ub0b4\ubd80\uc0ac\uc6a9\uc790 +cop.private = \ube44\uacf5\uac1c +cop.public = \uacf5\uac1c + +cop.adbkNm = \uc8fc\uc18c\ub85d\uba85 +cop.othbcScope = \uacf5\uac1c\ubc94\uc704 +cop.company = \ud68c\uc0ac +cop.part = \ubd80\uc11c +cop.man = \uac1c\uc778 +cop.adbkUser = \uad6c\uc131\uc6d0 +cop.bbsNm = \uac8c\uc2dc\ud310\uba85 +cop.bbsIntrcn = \uac8c\uc2dc\ud310\uc18c\uac1c +cop.bbsTyCode = \uac8c\uc2dc\ud310 \uc720\ud615 +cop.bbsAttrbCode = \uac8c\uc2dc\ud310 \uc18d\uc131 +cop.replyPosblAt = \ub2f5\uc7a5\uac00\ub2a5\uc5ec\ubd80 +cop.fileAtchPosblAt = \ud30c\uc77c\ucca8\ubd80\uac00\ub2a5\uc5ec\ubd80 +cop.posblAtchFileNumber = \ucca8\ubd80\uac00\ub2a5\ud30c\uc77c \uc22b\uc790 +cop.tmplatId = \ud15c\ud50c\ub9bf \uc815\ubcf4 +cop.guestList.subject = \ubc29\uba85\ub85d \uac8c\uc2dc\uae00\uc785\ub2c8\ub2e4. +cop.nttSj = \uc81c\ubaa9 +cop.nttCn = \uae00\ub0b4\uc6a9 +cop.ntceBgnde = \uac8c\uc2dc\uc2dc\uc791\uc77c +cop.ntceEndde = \uac8c\uc2dc\uc885\ub8cc\uc77c +cop.ntcrNm = \uc791\uc131\uc790 +cop.password = \ud328\uc2a4\uc6cc\ub4dc +cop.atchFile = \ud30c\uc77c\ucca8\ubd80 +cop.guestList = \ubc29\uba85\ub85d +cop.guestListCn = \ubc29\uba85\ub85d \ub0b4\uc6a9 +cop.noticeTerm = \uac8c\uc2dc\uae30\uac04 +cop.atchFileList = \ucca8\ubd80\ud30c\uc77c\ubaa9\ub85d +cop.cmmntyNm = \ucee4\ubba4\ub2c8\ud2f0\uba85 +cop.cmmntyIntrcn = \ucee4\ubba4\ub2c8\ud2f0 \uc18c\uac1c +cop.cmmntyMngr = \ucee4\ubba4\ub2c8\ud2f0 \uad00\ub9ac\uc790 +cop.clbOprtr = \ub3d9\ud638\ud68c \uc6b4\uc601\uc790 +cop.clbIntrcn = \ub3d9\ud638\ud68c \uc18c\uac1c +cop.clbNm = \ub3d9\ud638\ud68c \uba85 +cop.tmplatNm = \ud15c\ud50c\ub9bf\uba85 +cop.tmplatSeCode = \ud15c\ud50c\ub9bf \uad6c\ubd84 +cop.tmplatCours = \ud15c\ud50c\ub9bf\uacbd\ub85c +cop.useAt = \uc0ac\uc6a9\uc5ec\ubd80 +cop.ncrdNm = \uc774\ub984 +cop.cmpnyNm = \ud68c\uc0ac\uba85 +cop.deptNm = \ubd80\uc11c\uba85 +cop.ofcpsNm = \uc9c1\uc704 +cop.clsfNm = \uc9c1\uae09 +cop.emailAdres = \uc774\uba54\uc77c\uc8fc\uc18c +cop.telNo = \uc804\ud654\ubc88\ud638 +cop.mbtlNum = \ud734\ub300\ud3f0\ubc88\ud638 +cop.adres = \uc8fc\uc18c +cop.extrlUserAt = \uc678\ubd80\uc0ac\uc6a9\uc790\uc5ec\ubd80 +cop.publicAt = \uacf5\uac1c\uc5ec\ubd80 +cop.remark = \ube44\uace0 +cop.trgetNm = \ucee4\ubba4\ub2c8\ud2f0/\ub3d9\ud638\ud68c \uc815\ubcf4 +cop.preview = \ubbf8\ub9ac\ubcf4\uae30 + +cop.withdraw.msg=\ud0c8\ud1f4\ucc98\ub9ac \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.reregist.msg=\uc7ac\uac00\uc785 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.registmanager.msg=\uc6b4\uc601\uc9c4\uc73c\ub85c \ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.use.msg=\uc0ac\uc6a9 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.unuse.msg=\uc0ac\uc6a9\uc911\uc9c0 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.delete.confirm.msg=\uc0ac\uc6a9\uc911\uc9c0\ub97c \uc120\ud0dd\ud558\uc2e4 \uacbd\uc6b0 \ub2e4\uc2dc \uc0ac\uc6a9\uc73c\ub85c \ubcc0\uacbd\uc774 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4. +cop.ing.msg=\uc2b9\uc778\uc694\uccad \uc911\uc785\ub2c8\ub2e4. +cop.request.msg=\uac00\uc785\uc2e0\uccad\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc694\uccad\ub418\uc5c8\uc2b5\ub2c8\ub2e4 +cop.password.msg=\ud328\uc2a4\uc6cc\ub4dc\ub97c \uc785\ub825\ud574 \uc8fc\uc2ed\uc2dc\uc624. +cop.password.not.same.msg=\ud328\uc2a4\uc6cc\ub4dc\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. + +cop.comment.wrterNm = \uc791\uc131\uc790 +cop.comment.commentCn = \ub0b4\uc6a9 +cop.comment.commentPassword = \ud328\uc2a4\uc6cc\ub4dc + +cop.satisfaction.wrterNm = \uc791\uc131\uc790 +cop.satisfaction.stsfdgCn = \ub0b4\uc6a9 +cop.satisfaction.stsfdg = \ub9cc\uc871\ub3c4 +cop.satisfaction.stsfdgPassword = \ud328\uc2a4\uc6cc\ub4dc + +cop.scrap.scrapNm = \uc2a4\ud06c\ub7a9\uba85 + +#UI USS Message# +uss.ion.noi.ntfcSj=\uc81c\ubaa9 +uss.ion.noi.ntfcCn=\ub0b4\uc6a9 +uss.ion.noi.ntfcDate=\uc54c\ub9bc\uc77c\uc790 +uss.ion.noi.ntfcTime=\uc54c\ub9bc\uc2dc\uac04 +uss.ion.noi.ntfcHH=\uc54c\ub9bc\uc2dc\uac04 +uss.ion.noi.ntfcMM=\uc54c\ub9bc\ubd84 +uss.ion.noi.bhNtfcIntrvl=\uc0ac\uc804\uc54c\ub9bc\uac04\uaca9 +uss.ion.noi.bhNtfcIntrvl.msg=\uc0ac\uc804\uc54c\ub9bc\uac04\uaca9 \uc9c0\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. +uss.ion.noi.alertNtfcTime=\uc54c\ub9bc\uc77c\uc790 \ubc0f \uc2dc\uac04\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. + +#UI COP Message# +cop.sms.trnsmitTelno=\ubc1c\uc2e0\uc804\ud654\ubc88\ud638 +cop.sms.trnsmitCn=\uc804\uc1a1\ub0b4\uc6a9 +cop.sms.recptnTelno=\uc218\uc2e0\uc804\ud654\ubc88\ud638 +cop.sms.send=\uc804\uc1a1 +cop.sms.addRecptn=\ucd94\uac00 +cop.sms.recptnTelno.msg=\uc218\uc2e0\uc804\ud654\ubc88\ud638 \uc9c0\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. + +#UI sym.log Message# +sym.log.histSeCode = \uc774\ub825\uad6c\ubd84 +sym.log.sysNm = \uc2dc\uc2a4\ud15c\uba85 +sym.log.histCn = \uc774\ub825\ub0b4\uc6a9 +sym.log.atchFile = \ucca8\ubd80\ud30c\uc77c +sym.log.atchFileList = \ucca8\ubd80\ud30c\uc77c\ubaa9\ub85d +sym.ems.receiver = \ubc1b\ub294\uc0ac\ub78c +sym.ems.title = \uc81c\ubaa9 +sym.ems.content = \ubc1c\uc2e0\ub0b4\uc6a9 + +#Vlidator Errors# +errors.prefix=
+errors.suffix=

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

+ +errors.required={0}\uc740(\ub294) \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +errors.minlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. +errors.maxlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +errors.invalid={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uac12\uc785\ub2c8\ub2e4. +errors.minInteger={0}\uc740(\ub294) \uc720\ud6a8\ud55c \uac12\uc774 \uc544\ub2d9\ub2c8\ub2e4. 1 \uc774\uc0c1\uc758 \uac12\uc744 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. +errors.byte={0}\uc740(\ub294) byte\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.short={0}\uc740(\ub294) short\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.integer={0}\uc740(\ub294) \uc815\uc218 \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.long={0}\uc740(\ub294) long \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.float={0}\uc740(\ub294) \uc2e4\uc218 \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.double={0}\uc740(\ub294) double \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. + +errors.date={0}\uc740(\ub294) \ub0a0\uc9dc \uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4. +errors.range={0}\uc740(\ub294) {1}\uacfc {2} \uc0ac\uc774\uc758 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.creditcard={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc2e0\uc6a9\uce74\ub4dc \ubc88\ud638\uc785\ub2c8\ub2e4. +errors.email={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc774\uba54\uc77c \uc8fc\uc18c\uc785\ub2c8\ub2e4. + +errors.ihidnum=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\uc785\ub2c8\ub2e4. +errors.korean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc785\ub825\ud558\uc154\uc57c \ud569\ub2c8\ub2e4. +errors.ip=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 IP\uc8fc\uc18c\uc785\ub2c8\ub2e4. + +errors.password1={0}\uc740(\ub294) 8~20\uc790 \ub0b4\uc5d0\uc11c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. +errors.password2={0}\uc740(\ub294) \ud55c\uae00,\ud2b9\uc218\ubb38\uc790,\ub744\uc5b4\uc4f0\uae30\ub294 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +errors.password3={0}\uc740(\ub294) \uc21c\ucc28\uc801\uc778 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +errors.password4={0}\uc740(\ub294) \ubc18\ubcf5\ub418\ub294 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. + +errors.notKorean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc0ac\uc6a9\ud558\uc2e4\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +error.security.runtime.error = error + +#Xss Errors# +errors.xss.checkerUser=\ud574\ub2f9 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc0ac\uc6a9 \ubc0f \ucc98\ub9ac \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. + +#File Upload / Download +errors.file.extension=\uc9c0\uc6d0\ub418\ub294 \ud30c\uc77c\uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4. +errors.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. +success.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. + +#Vlidator Errors- wordDicaryVO# +wordDicaryVO.wordNm=\uc6a9\uc5b4\uba85 +wordDicaryVO.engNm=\uc601\ubb38\uba85 +wordDicaryVO.wordDc=\uc6a9\uc5b4\uc124\uba85 +wordDicaryVO.synonm=\ub3d9\uc758\uc5b4 + +#Vlidator Errors- cnsltManageVO# +cnsltManageVO.cnsltSj=\uc0c1\ub2f4\uc81c\ubaa9 +cnsltManageVO.cnsltCn=\uc0c1\ub2f4\ub0b4\uc6a9 +cnsltManageVO.writngPassword=\uc791\uc131\ube44\ubc00\ubc88\ud638 +cnsltManageVO.areaNo=\uc9c0\uc5ed\ubc88\ud638 +cnsltManageVO.middleTelno=\uc911\uac04\uc804\ud654\ubc88\ud638 +cnsltManageVO.endTelno=\ub05d\uc804\ud654\ubc88\ud638 +cnsltManageVO.wrterNm=\uc791\uc131\uc790\uba85 +cnsltManageVO.managtCn=\ub2f5\ubcc0\ub0b4\uc6a9 + +#Vlidator Errors- siteManageVO# +siteManageVO.siteNm=\uc0ac\uc774\ud2b8\uba85 +siteManageVO.siteUrl=\uc0ac\uc774\ud2b8 URL +siteManageVO.siteDc=\uc0ac\uc774\ud2b8\uc124\uba85 +siteManageVO.siteThemaClCode=\uc0ac\uc774\ud2b8\uc8fc\uc81c\ubd84\ub958 +siteManageVO.actvtyAt=\ud65c\uc131\uc5ec\ubd80 +siteManageVO.useAt=\uc0ac\uc6a9\uc5ec\ubd80 + +#Vlidator Errors- recomendSiteManageVO# +recomendSiteManageVO.recomendSiteNm=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uba85 +recomendSiteManageVO.recomendSiteUrl=\ucd94\ucc9c\uc0ac\uc774\ud2b8 URL +recomendSiteManageVO.recomendSiteDc=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uc124\uba85 +recomendSiteManageVO.recomendResnCn=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uc2b9\uc778\uc0ac\uc720 +recomendSiteManageVO.confmDe=\uc2b9\uc778\uc77c\uc790 + +#Vlidator Errors- hpcmManageVO# +hpcmManageVO.hpcmSeCode=\ub3c4\uc6c0\ub9d0\uad6c\ubd84 +hpcmManageVO.hpcmDf=\ub3c4\uc6c0\ub9d0\uc815\uc758 +hpcmManageVO.hpcmDc=\ub3c4\uc6c0\ub9d0\uc124\uba85 + +#Vlidator Errors- newsManageVO# +newsManageVO.newsSj=\ub274\uc2a4\uc81c\ubaa9 +newsManageVO.newsCn=\ub274\uc2a4\ub0b4\uc6a9 +newsManageVO.ntceDe=\uac8c\uc2dc\uc77c\uc790 + +#Vlidator Errors- faqManageVO# +faqManageVO.qestnSj=\uc9c8\ubb38\uc81c\ubaa9 +faqManageVO.qestnCn=\uc9c8\ubb38\ub0b4\uc6a9 +faqManageVO.answerCn=\ub2f5\ubcc0\ub0b4\uc6a9 + +#Vlidator Errors- stplatManageVO# +stplatManageVO.useStplatNm=\uc774\uc6a9\uc57d\uad00\uba85 +stplatManageVO.useStplatCn=\uc774\uc6a9\uc57d\uad00\ub0b4\uc6a9 +stplatManageVO.infoProvdAgreCn=\uc815\ubcf4\uc81c\uacf5\ub3d9\uc758\ub0b4\uc6a9 + +#Vlidator Errors- cpyrhtPrtcPolicyVO# +cpyrhtPrtcPolicyVO.cpyrhtPrtcPolicyCn=\uc800\uc791\uad8c\ubcf4\ud638\uc815\ucc45\ub0b4\uc6a9 + +#Vlidator Errors- qnaManageVO# +qnaManageVO.qestnSj=\uc9c8\ubb38\uc81c\ubaa9 +qnaManageVO.qestnCn=\uc9c8\ubb38\ub0b4\uc6a9 +qnaManageVO.writngPassword=\uc791\uc131\ube44\ubc00\ubc88\ud638 +qnaManageVO.areaNo=\uc9c0\uc5ed\ubc88\ud638 +qnaManageVO.middleTelno=\uc911\uac04\uc804\ud654\ubc88\ud638 +qnaManageVO.endTelno=\ub05d\uc804\ud654\ubc88\ud638 +qnaManageVO.wrterNm=\uc791\uc131\uc790\uba85 +qnaManageVO.answerCn=\ub2f5\ubcc0\ub0b4\uc6a9 + +#Vlidator Errors- ReprtStatsVO# +sts.reprtId = \ubcf4\uace0\uc11cID +sts.title = \ubcf4\uace0\uc11c\uba85 +sts.category = \ubcf4\uace0\uc11c\uc720\ud615 +sts.status = \uc9c4\ud589\uc0c1\ud0dc +sts.regDate = \ub4f1\ub85d\uc77c\uc2dc + +#Rest day messages# +sym.cal.restDay = \ud734\uc77c\uc77c\uc790 +sym.cal.restName = \ud734\uc77c\uba85 +sym.cal.restDetail = \ud734\uc77c\uc124\uba85 +sym.cal.restCategory = \ud734\uc77c\uad6c\ubd84 + +image.errorBg = \uc624\ub958\uc774\ubbf8\uc9c0 + + +#Custom message# +custom.fail.access=\uc815\uc0c1\uc801\uc778 \uc811\uadfc\uc774 \uc544\ub2d9\ub2c8\ub2e4. \ub85c\uadf8\uc778 \ud6c4 \uc774\uc6a9\ud558\uc138\uc694. +custom.fail.accessDenied=\uc694\uccad\uc5d0 \ub300\ud55c \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. +custom.isNotExist.msg=\ucc98\ub9ac\uc5d0 \ud544\uc694\ud55c \uc790\ub8cc\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. diff --git a/src/test/resources/spring/context-beans.xml b/src/test/resources/spring/context-beans.xml new file mode 100644 index 0000000..8ec9d84 --- /dev/null +++ b/src/test/resources/spring/context-beans.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/src/test/resources/spring/context-common.xml b/src/test/resources/spring/context-common.xml new file mode 100644 index 0000000..5a3e076 --- /dev/null +++ b/src/test/resources/spring/context-common.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + classpath:message/message-common + classpath:message/authentication-message + classpath:org/egovframe/rte/fdl/property/messages/properties + + + + + 60 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/spring/context-datasource.xml b/src/test/resources/spring/context-datasource.xml new file mode 100644 index 0000000..dc3465a --- /dev/null +++ b/src/test/resources/spring/context-datasource.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/sql/mapper/base/code-mapper.xml b/src/test/resources/sql/mapper/base/code-mapper.xml new file mode 100644 index 0000000..996a54f --- /dev/null +++ b/src/test/resources/sql/mapper/base/code-mapper.xml @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SELECT * + FROM TBL_CODE_CTGR + WHERE USE_YN = 'Y' + AND CTGR_ID IN (#{categoryID}) +ORDER BY CTGR_ID + + + + + + +/* 코드 카테고리 등록(codeMapper.insertCategory) */ +INSERT INTO TBL_CODE_CTGR ( + CTGR_ID + , CTGR_NM + , DSCRP + , INS_ID + , INS_DT + , USE_YN +) VALUES ( + #{category.id} + , #{category.name} + , #{category.description} + , #{currentUser.id} + , CURRENT_TIMESTAMP() + , 'Y' +) + +/* 코드 카테고리 수정(codeMapper.updateCategory) */ +UPDATE TBL_CODE_CTGR SET + CTGR_NM = #{category.name} + , DSCRP = #{category.description} +WHERE CTGR_ID = #{category.id} + +/* 코드 카테고리 제거(codeMapper.removeCategories) */ +UPDATE TBL_CODE_CTGR SET + USE_YN = 'N' +WHERE CTGR_ID IN (#{categoryID}) + + +SELECT * + FROM TBL_CODE_GRP + WHERE USE_YN = 'Y' +AND CTGR_ID IN (#{categoryID}) +AND GRP_ID IN (#{groupID}) +ORDER BY GRP_ID + + + + + + +/* 코드그룹 등록(codeMapper.insertGroup) */ +INSERT INTO TBL_CODE_GRP ( + GRP_ID + , GRP_NM + , CTGR_ID + , DSCRP + , INS_DT + , INS_ID + , USE_YN +) VALUES ( + #{group.id} + , #{group.name} + , #{group.categoryID} + , #{group.description} + , CURRENT_TIMESTAMP() + , #{currentUser.id} + , 'Y' +) + +/* 코드그룹 수정(codeMapper.updateGroup) */ +UPDATE TBL_CODE_GRP SET + GRP_NM = #{group.name} + , CTGR_ID = #{group.categoryID} + , DSCRP = #{group.description} + WHERE GRP_ID = #{group.id} + +/*코드그룹 제거(codeMapper.removeGroups) */ +UPDATE TBL_CODE_GRP SET + USE_YN = 'N' + +CTGR_ID IN (#{categoryID}) +GRP_ID IN (#{groupID}) + + + +SELECT * + FROM TBL_CMN_CODE + WHERE USE_YN = 'Y' + AND GRP_ID IN (#{groupID}) + AND CODE IN (#{code}) + ORDER BY GRP_ID, SRT_ORD, CODE + + + + + + +/* 코드 등록(codeMapper.insertCode) */ +INSERT INTO TBL_CMN_CODE ( + GRP_ID + , CODE + , CODE_VAL + , DSCRP + , ETC_1 + , ETC_2 + , ETC_3 + , SRT_ORD + , INS_DT + , INS_ID + , USE_YN +) VALUES ( + #{code.groupID} + , #{code.code} + , #{code.value} + , #{code.description} + , #{code.etc1} + , #{code.etc2} + , #{code.etc3} + , #{code.sortOrder} + , CURRENT_TIMESTAMP() + , #{currentUser.id} + , 'Y' +) + +/* 코드 수정(codeMapper.updateCode) */ +UPDATE TBL_CMN_CODE SET + CODE_VAL = #{code.value} + , DSCRP = #{code.description} + , ETC_1 = #{code.etc1} + , ETC_2 = #{code.etc2} + , ETC_3 = #{code.etc3} + WHERE GRP_ID = #{code.groupID} + AND CODE = #{code.code} + +/* 코드 정렬순서 변경(codeMapper.reorderCodes) */ +UPDATE TBL_CMN_CODE SET + SRT_ORD = CASE CODE + WHEN #{code} THEN #{index} + + ELSE SRT_ORD + END + WHERE GRP_ID = #{groupID} + AND CODE IN (#{code}) + +/* 코드 제거(codeMapper.removeCodes) */ +UPDATE TBL_CMN_CODE SET + USE_YN = 'N' + +AND GRP_ID IN (#{groupID}) +AND CODE IN (#{code}) + + + \ No newline at end of file diff --git a/src/test/resources/sql/mapper/base/test.xml b/src/test/resources/sql/mapper/base/test.xml new file mode 100644 index 0000000..f62c6fc --- /dev/null +++ b/src/test/resources/sql/mapper/base/test.xml @@ -0,0 +1,14 @@ + + + + +${sql} + +${sql} + +${sql} + +COMMIT + + + \ No newline at end of file diff --git a/src/test/resources/sql/mapper/base/utility.xml b/src/test/resources/sql/mapper/base/utility.xml new file mode 100644 index 0000000..6e39d6d --- /dev/null +++ b/src/test/resources/sql/mapper/base/utility.xml @@ -0,0 +1,27 @@ + + + + + + +SELECT QROWS.* FROM ( + SELECT ROW_NUMBER() OVER() ROW_NUM + , COUNT(*) OVER() TOT_CNT, QBODY.* + FROM ( + + ) QBODY + ) QROWS +WHERE ROW_NUM BETWEEN ((#{pageNum} - 1) * #{fetchSize}) + 1 AND (#{pageNum} * #{fetchSize}) + + + +ORDER BY ${orderBy} + + + +IFNULL(#{thisDay}, TO_CHAR(CURRENT_DATE, 'YYYYMMDD')) + +SELECTTHIS_DAY + + \ No newline at end of file diff --git a/src/test/resources/sql/mybatis-config.xml b/src/test/resources/sql/mybatis-config.xml new file mode 100644 index 0000000..03ad4e8 --- /dev/null +++ b/src/test/resources/sql/mybatis-config.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file