argumentResolvers) {
+ argumentResolvers.add(new CustomAuthenticationPrincipalResolver());
+ }
+}
\ No newline at end of file
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/util/EgovNumberUtil.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/util/EgovNumberUtil.java
new file mode 100644
index 0000000..9a68e0f
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/util/EgovNumberUtil.java
@@ -0,0 +1,240 @@
+/**
+ * @Class Name : EgovNumberUtil.java
+ * @Description : 숫자 데이터 처리 관련 유틸리티
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.13 이삼섭 최초 생성
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 02. 13
+ * @version 1.0
+ * @see
+ *
+ */
+
+package com.dbnt.kcscbackend.config.util;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.security.SecureRandom;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ *
+ * @author : 정완배
+ * @since : 2023. 8. 9.
+ * @version : 1.0
+ *
+ * @package : egovframework.let.utl.fcc.service
+ * @filename : EgovNumberUtil.java
+ * @modificationInformation
+ *
+ *
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- ---------- ----------------------
+ * 2023. 8. 9. 정완배 주석추가
+ *
+ *
+ *
+ */
+@Slf4j
+public class EgovNumberUtil {
+
+ private static SecureRandom rnd = new SecureRandom();
+
+ /**
+ * 특정숫자 집합에서 랜덤 숫자를 구하는 기능 시작숫자와 종료숫자 사이에서 구한 랜덤 숫자를 반환한다
+ *
+ * @param startNum - 시작숫자
+ * @param endNum - 종료숫자
+ * @return 랜덤숫자
+ * @see
+ */
+ public static int getRandomNum(int startNum, int endNum) {
+ int randomNum = 0;
+
+ do {
+ // 종료숫자내에서 랜덤 숫자를 발생시킨다.
+ randomNum = rnd.nextInt(endNum + 1);
+ } while (randomNum < startNum); // 랜덤 숫자가 시작숫자보다 작을경우 다시 랜덤숫자를 발생시킨다.
+
+ return randomNum;
+ }
+
+ /**
+ * 특정 숫자 집합에서 특정 숫자가 있는지 체크하는 기능 12345678에서 7이 있는지 없는지 체크하는 기능을 제공함
+ *
+ * @param sourceInt - 특정숫자집합
+ * @param searchInt - 검색숫자
+ * @return 존재여부
+ * @see
+ */
+ public static Boolean getNumSearchCheck(int sourceInt, int searchInt) {
+ String sourceStr = String.valueOf(sourceInt);
+ String searchStr = String.valueOf(searchInt);
+
+ // 특정숫자가 존재하는지 하여 위치값을 리턴한다. 없을 시 -1
+ if (sourceStr.indexOf(searchStr) == -1) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * 숫자타입을 문자열로 변환하는 기능 숫자 20081212를 문자열 '20081212'로 변환하는 기능
+ *
+ * @param srcNumber - 숫자
+ * @return 문자열
+ * @see
+ */
+ public static String getNumToStrCnvr(int srcNumber) {
+ String rtnStr = null;
+
+ rtnStr = String.valueOf(srcNumber);
+
+ return rtnStr;
+ }
+
+
+ /**
+ * 숫자타입을 데이트 타입으로 변환하는 기능
+ * 숫자 20081212를 데이트타입 '2008-12-12'로 변환하는 기능
+ * @param srcNumber - 숫자
+ * @return String
+ * @see
+ */
+ public static String getNumToDateCnvr(int srcNumber) {
+
+ String pattern = null;
+ String cnvrStr = null;
+
+ String srcStr = String.valueOf(srcNumber);
+
+ // Date 형태인 8자리 및 14자리만 정상처리
+ if (srcStr.length() != 8 && srcStr.length() != 14) {
+ throw new IllegalArgumentException("Invalid Number: " + srcStr + " Length=" + srcStr.trim().length());
+ }
+
+ if (srcStr.length() == 8) {
+ pattern = "yyyyMMdd";
+ } else if (srcStr.length() == 14) {
+ pattern = "yyyyMMddhhmmss";
+ }
+
+ SimpleDateFormat dateFormatter = new SimpleDateFormat(pattern, Locale.KOREA);
+
+ Date cnvrDate = null;
+
+ try {
+ cnvrDate = dateFormatter.parse(srcStr);
+ } catch (ParseException e) {
+ log.error("ERROR parsing", e.getMessage());
+ }
+
+ cnvrStr = String.format("%1$tY-%1$tm-%1$td", cnvrDate);
+
+ return cnvrStr;
+
+ }
+
+ /**
+ * 체크할 숫자 중에서 숫자인지 아닌지 체크하는 기능
+ * 숫자이면 True, 아니면 False를 반환한다
+ * @param checkStr - 체크문자열
+ * @return 숫자여부
+ * @see
+ */
+ public static Boolean getNumberValidCheck(String checkStr) {
+
+ int i;
+ //String sourceStr = String.valueOf(sourceInt);
+
+ int checkStrLt = checkStr.length();
+
+ for (i = 0; i < checkStrLt; i++) {
+
+ // 아스키코드값( '0'-> 48, '9' -> 57)
+ if (checkStr.charAt(i) > 47 && checkStr.charAt(i) < 58) {
+ continue;
+ } else {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * 특정숫자를 다른 숫자로 치환하는 기능 숫자 12345678에서 123를 999로 변환하는 기능을 제공(99945678)
+ *
+ * @param srcNumber - 숫자집합
+ * @param cnvrSrcNumber - 원래숫자
+ * @param cnvrTrgtNumber - 치환숫자
+ * @return 치환숫자
+ * @see
+ */
+
+ public static int getNumberCnvr(int srcNumber, int cnvrSrcNumber, int cnvrTrgtNumber) {
+
+ // 입력받은 숫자를 문자열로 변환
+ String source = String.valueOf(srcNumber);
+ String subject = String.valueOf(cnvrSrcNumber);
+ String object = String.valueOf(cnvrTrgtNumber);
+
+ StringBuffer rtnStr = new StringBuffer();
+ String preStr = "";
+ String nextStr = source;
+
+ // 원본숫자에서 변환대상숫자의 위치를 찾는다.
+ while (source.indexOf(subject) >= 0) {
+ preStr = source.substring(0, source.indexOf(subject)); // 변환대상숫자 위치까지 숫자를 잘라낸다
+ nextStr = source.substring(source.indexOf(subject) + subject.length(), source.length());
+ source = nextStr;
+ rtnStr.append(preStr).append(object); // 변환대상위치 숫자에 변환할 숫자를 붙여준다.
+ }
+ rtnStr.append(nextStr); // 변환대상 숫자 이후 숫자를 붙여준다.
+
+ return Integer.parseInt(rtnStr.toString());
+ }
+
+ /**
+ * 특정숫자가 실수인지, 정수인지, 음수인지 체크하는 기능 123이 실수인지, 정수인지, 음수인지 체크하는 기능을 제공함
+ *
+ * @param srcNumber - 숫자집합
+ * @return -1(음수), 0(정수), 1(실수)
+ * @see
+ */
+ public static int checkRlnoInteger(double srcNumber) {
+
+ // byte 1바이트 ▶소수점이 없는 숫자로, 범위 -2^7 ~ 2^7 -1
+ // short 2바이트 ▶소수점이 없는 숫자로, 범위 -2^15 ~ 2^15 -1
+ // int 4바이트 ▶소수점이 없는 숫자로, 범위 -2^31 ~ 2^31 - 1
+ // long 8바이트 ▶소수점이 없는 숫자로, 범위 -2^63 ~ 2^63-1
+
+ // float 4바이트 ▶소수점이 있는 숫자로, 끝에 F 또는 f 가 붙는 숫자 (예:3.14f)
+ // double 8바이트 ▶소수점이 있는 숫자로, 끝에 아무것도 붙지 않는 숫자 (예:3.14)
+ // ▶소수점이 있는 숫자로, 끝에 D 또는 d 가 붙는 숫자(예:3.14d)
+
+ String cnvrString = null;
+
+ if (srcNumber < 0) {
+ return -1;
+ } else {
+ cnvrString = String.valueOf(srcNumber);
+
+ if (cnvrString.indexOf(".") == -1) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+ }
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/util/EgovStringUtil.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/util/EgovStringUtil.java
new file mode 100644
index 0000000..c3f256c
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/util/EgovStringUtil.java
@@ -0,0 +1,888 @@
+/**
+ * @Class Name : EgovStringUtil.java
+ * @Description : 문자열 데이터 처리 관련 유틸리티
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.01.13 박정규 최초 생성
+ * 2009.02.13 이삼섭 내용 추가
+ *
+ * @author 공통 서비스 개발팀 박정규
+ * @since 2009. 01. 13
+ * @version 1.0
+ * @see
+ *
+ */
+
+package com.dbnt.kcscbackend.config.util;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the ";License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS"; BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.security.SecureRandom;
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+public class EgovStringUtil {
+
+ /**
+ * 빈 문자열 "".
+ */
+ public static final String EMPTY = "";
+
+ /**
+ * 랜덤 객체
+ */
+ public static SecureRandom rnd = new SecureRandom();
+
+ /**
+ * Padding을 할 수 있는 최대 수치
+ */
+ // private static final int PAD_LIMIT = 8192;
+ /**
+ * An array of Strings used for padding.
+ * Used for efficient space padding. The length of each String expands as needed.
+ */
+ /*
+ private static final String[] PADDING = new String[Character.MAX_VALUE];
+
+ static {
+ // space padding is most common, start with 64 chars
+ PADDING[32] = " ";
+ }
+ */
+
+ /**
+ * 문자열이 지정한 길이를 초과했을때 지정한길이에다가 해당 문자열을 붙여주는 메서드.
+ * @param source 원본 문자열 배열
+ * @param output 더할문자열
+ * @param slength 지정길이
+ * @return 지정길이로 잘라서 더할분자열 합친 문자열
+ */
+ public static String cutString(String source, String output, int slength) {
+ String returnVal = null;
+ if (source != null) {
+ if (source.length() > slength) {
+ returnVal = source.substring(0, slength) + output;
+ } else {
+ returnVal = source;
+ }
+ }
+ return returnVal;
+ }
+
+ /**
+ * 문자열이 지정한 길이를 초과했을때 해당 문자열을 삭제하는 메서드
+ * @param source 원본 문자열 배열
+ * @param slength 지정길이
+ * @return 지정길이로 잘라서 더할분자열 합친 문자열
+ */
+ public static String cutString(String source, int slength) {
+ String result = null;
+ if (source != null) {
+ if (source.length() > slength) {
+ result = source.substring(0, slength);
+ } else {
+ result = source;
+ }
+ }
+ return result;
+ }
+
+ /**
+ *
+ * String이 비었거나("") 혹은 null 인지 검증한다.
+ *
+ *
+ *
+ * StringUtil.isEmpty(null) = true
+ * StringUtil.isEmpty("") = true
+ * StringUtil.isEmpty(" ") = false
+ * StringUtil.isEmpty("bob") = false
+ * StringUtil.isEmpty(" bob ") = false
+ *
+ *
+ * @param str - 체크 대상 스트링오브젝트이며 null을 허용함
+ * @return true - 입력받은 String 이 빈 문자열 또는 null인 경우
+ */
+ public static boolean isEmpty(String str) {
+ return str == null || str.length() == 0;
+ }
+
+ /**
+ * 기준 문자열에 포함된 모든 대상 문자(char)를 제거한다.
+ *
+ *
+ * StringUtil.remove(null, *) = null
+ * StringUtil.remove("", *) = ""
+ * StringUtil.remove("queued", 'u') = "qeed"
+ * StringUtil.remove("queued", 'z') = "queued"
+ *
+ *
+ * @param str 입력받는 기준 문자열
+ * @param remove 입력받는 문자열에서 제거할 대상 문자열
+ * @return 제거대상 문자열이 제거된 입력문자열. 입력문자열이 null인 경우 출력문자열은 null
+ */
+ public static String remove(String str, char remove) {
+ if (isEmpty(str) || str.indexOf(remove) == -1) {
+ return str;
+ }
+ char[] chars = str.toCharArray();
+ int pos = 0;
+ for (int i = 0; i < chars.length; i++) {
+ if (chars[i] != remove) {
+ chars[pos++] = chars[i];
+ }
+ }
+ return new String(chars, 0, pos);
+ }
+
+ /**
+ * 문자열 내부의 콤마 character(,)를 모두 제거한다.
+ *
+ *
+ * StringUtil.removeCommaChar(null) = null
+ * StringUtil.removeCommaChar("") = ""
+ * StringUtil.removeCommaChar("asdfg,qweqe") = "asdfgqweqe"
+ *
+ *
+ * @param str 입력받는 기준 문자열
+ * @return " , "가 제거된 입력문자열
+ * 입력문자열이 null인 경우 출력문자열은 null
+ */
+ public static String removeCommaChar(String str) {
+ return remove(str, ',');
+ }
+
+ /**
+ * 문자열 내부의 마이너스 character(-)를 모두 제거한다.
+ *
+ *
+ * StringUtil.removeMinusChar(null) = null
+ * StringUtil.removeMinusChar("") = ""
+ * StringUtil.removeMinusChar("a-sdfg-qweqe") = "asdfgqweqe"
+ *
+ *
+ * @param str 입력받는 기준 문자열
+ * @return " - "가 제거된 입력문자열
+ * 입력문자열이 null인 경우 출력문자열은 null
+ */
+ public static String removeMinusChar(String str) {
+ return remove(str, '-');
+ }
+
+ /**
+ * 원본 문자열의 포함된 특정 문자열을 새로운 문자열로 변환하는 메서드
+ * @param source 원본 문자열
+ * @param subject 원본 문자열에 포함된 특정 문자열
+ * @param object 변환할 문자열
+ * @return sb.toString() 새로운 문자열로 변환된 문자열
+ */
+ public static String replace(String source, String subject, String object) {
+ StringBuffer rtnStr = new StringBuffer();
+ String preStr = "";
+ String nextStr = source;
+ String srcStr = source;
+
+ while (srcStr.indexOf(subject) >= 0) {
+ preStr = srcStr.substring(0, srcStr.indexOf(subject));
+ nextStr = srcStr.substring(srcStr.indexOf(subject) + subject.length(), srcStr.length());
+ srcStr = nextStr;
+ rtnStr.append(preStr).append(object);
+ }
+ rtnStr.append(nextStr);
+ return rtnStr.toString();
+ }
+
+ /**
+ * 원본 문자열의 포함된 특정 문자열 첫번째 한개만 새로운 문자열로 변환하는 메서드
+ * @param source 원본 문자열
+ * @param subject 원본 문자열에 포함된 특정 문자열
+ * @param object 변환할 문자열
+ * @return sb.toString() 새로운 문자열로 변환된 문자열 / source 특정문자열이 없는 경우 원본 문자열
+ */
+ public static String replaceOnce(String source, String subject, String object) {
+ StringBuffer rtnStr = new StringBuffer();
+ String preStr = "";
+ String nextStr = source;
+ if (source.indexOf(subject) >= 0) {
+ preStr = source.substring(0, source.indexOf(subject));
+ nextStr = source.substring(source.indexOf(subject) + subject.length(), source.length());
+ rtnStr.append(preStr).append(object).append(nextStr);
+ return rtnStr.toString();
+ } else {
+ return source;
+ }
+ }
+
+ /**
+ * subject에 포함된 각각의 문자를 object로 변환한다.
+ *
+ * @param source 원본 문자열
+ * @param subject 원본 문자열에 포함된 특정 문자열
+ * @param object 변환할 문자열
+ * @return sb.toString() 새로운 문자열로 변환된 문자열
+ */
+ public static String replaceChar(String source, String subject, String object) {
+ StringBuffer rtnStr = new StringBuffer();
+ String preStr = "";
+ String nextStr = source;
+ String srcStr = source;
+
+ char chA;
+
+ for (int i = 0; i < subject.length(); i++) {
+ chA = subject.charAt(i);
+
+ if (srcStr.indexOf(chA) >= 0) {
+ preStr = srcStr.substring(0, srcStr.indexOf(chA));
+ nextStr = srcStr.substring(srcStr.indexOf(chA) + 1, srcStr.length());
+ srcStr = rtnStr.append(preStr).append(object).append(nextStr).toString();
+ }
+ }
+
+ return srcStr;
+ }
+
+ /**
+ * str 중 searchStr의 시작(index) 위치를 반환.
+ *
+ * 입력값 중 null이 있을 경우 -1을 반환.
+ *
+ *
+ * StringUtil.indexOf(null, *) = -1
+ * StringUtil.indexOf(*, null) = -1
+ * StringUtil.indexOf("", "") = 0
+ * StringUtil.indexOf("aabaabaa", "a") = 0
+ * StringUtil.indexOf("aabaabaa", "b") = 2
+ * StringUtil.indexOf("aabaabaa", "ab") = 1
+ * StringUtil.indexOf("aabaabaa", "") = 0
+ *
+ *
+ * @param str 검색 문자열
+ * @param searchStr 검색 대상문자열
+ * @return 검색 문자열 중 검색 대상문자열이 있는 시작 위치 검색대상 문자열이 없거나 null인 경우 -1
+ */
+ public static int indexOf(String str, String searchStr) {
+ if (str == null || searchStr == null) {
+ return -1;
+ }
+ return str.indexOf(searchStr);
+ }
+
+ /**
+ * 오라클의 decode 함수와 동일한 기능을 가진 메서드이다.
+ * sourStr과 compareStr의 값이 같으면
+ * returStr을 반환하며, 다르면 defaultStr을 반환한다.
+ *
+ *
+ *
+ * StringUtil.decode(null, null, "foo", "bar")= "foo"
+ * StringUtil.decode("", null, "foo", "bar") = "bar"
+ * StringUtil.decode(null, "", "foo", "bar") = "bar"
+ * StringUtil.decode("하이", "하이", null, "bar") = null
+ * StringUtil.decode("하이", "하이 ", "foo", null) = null
+ * StringUtil.decode("하이", "하이", "foo", "bar") = "foo"
+ * StringUtil.decode("하이", "하이 ", "foo", "bar") = "bar"
+ *
+ *
+ * @param sourceStr 비교할 문자열
+ * @param compareStr 비교 대상 문자열
+ * @param returnStr sourceStr와 compareStr의 값이 같을 때 반환할 문자열
+ * @param defaultStr sourceStr와 compareStr의 값이 다를 때 반환할 문자열
+ * @return sourceStr과 compareStr의 값이 동일(equal)할 때 returnStr을 반환하며,
+ *
다르면 defaultStr을 반환한다.
+ */
+ public static String decode(String sourceStr, String compareStr, String returnStr, String defaultStr) {
+ if (sourceStr == null && compareStr == null) {
+ return returnStr;
+ }
+
+ else if (sourceStr != null && sourceStr.trim().equals(compareStr)) {
+ return returnStr;
+ }
+
+ return defaultStr;
+ }
+
+ /**
+ * 오라클의 decode 함수와 동일한 기능을 가진 메서드이다.
+ * sourStr과 compareStr의 값이 같으면
+ * returStr을 반환하며, 다르면 sourceStr을 반환한다.
+ *
+ *
+ *
+ * StringUtil.decode(null, null, "foo") = "foo"
+ * StringUtil.decode("", null, "foo") = ""
+ * StringUtil.decode(null, "", "foo") = null
+ * StringUtil.decode("하이", "하이", "foo") = "foo"
+ * StringUtil.decode("하이", "하이 ", "foo") = "하이"
+ * StringUtil.decode("하이", "바이", "foo") = "하이"
+ *
+ *
+ * @param sourceStr 비교할 문자열
+ * @param compareStr 비교 대상 문자열
+ * @param returnStr sourceStr와 compareStr의 값이 같을 때 반환할 문자열
+ * @return sourceStr과 compareStr의 값이 동일(equal)할 때 returnStr을 반환하며,
+ *
다르면 sourceStr을 반환한다.
+ */
+ public static String decode(String sourceStr, String compareStr, String returnStr) {
+ return decode(sourceStr, compareStr, returnStr, sourceStr);
+ }
+
+ /**
+ * 객체가 null인지 확인하고 null인 경우 "" 로 바꾸는 메서드
+ * @param object 원본 객체
+ * @return resultVal 문자열
+ */
+ public static String isNullToString(Object object) {
+ String string = "";
+
+ if (object != null) {
+ string = object.toString().trim();
+ }
+
+ return string;
+ }
+
+ /**
+ *
+ * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+ * @param src null값일 가능성이 있는 String 값.
+ * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+ *
+ */
+ public static String nullConvert(Object src) {
+ //if (src != null && src.getClass().getName().equals("java.math.BigDecimal")) {
+ if (src != null && src instanceof BigDecimal) {
+ return ((BigDecimal)src).toString();
+ }
+
+ if (src == null || src.equals("null")) {
+ return "";
+ } else {
+ return ((String)src).trim();
+ }
+ }
+
+ /**
+ *
+ * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+ * @param src null값일 가능성이 있는 String 값.
+ * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+ *
+ */
+ public static String nullConvert(String src) {
+
+ if (src == null || src.equals("null") || "".equals(src) || " ".equals(src)) {
+ return "";
+ } else {
+ return src.trim();
+ }
+ }
+
+ /**
+ *
+ * 인자로 받은 String이 null일 경우 "0"로 리턴한다.
+ * @param src null값일 가능성이 있는 String 값.
+ * @return 만약 String이 null 값일 경우 "0"로 바꾼 String 값.
+ *
+ */
+ public static int zeroConvert(Object src) {
+
+ if (src == null || src.equals("null")) {
+ return 0;
+ } else {
+ return Integer.parseInt(((String)src).trim());
+ }
+ }
+
+ /**
+ *
+ * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+ * @param src null값일 가능성이 있는 String 값.
+ * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+ *
+ */
+ public static int zeroConvert(String src) {
+
+ if (src == null || src.equals("null") || "".equals(src) || " ".equals(src)) {
+ return 0;
+ } else {
+ return Integer.parseInt(src.trim());
+ }
+ }
+
+ /**
+ * 문자열에서 {@link Character#isWhitespace(char)}에 정의된
+ * 모든 공백문자를 제거한다.
+ *
+ *
+ * StringUtil.removeWhitespace(null) = null
+ * StringUtil.removeWhitespace("") = ""
+ * StringUtil.removeWhitespace("abc") = "abc"
+ * StringUtil.removeWhitespace(" ab c ") = "abc"
+ *
+ *
+ * @param str 공백문자가 제거도어야 할 문자열
+ * @return the 공백문자가 제거된 문자열, null이 입력되면 null이 리턴
+ */
+ public static String removeWhitespace(String str) {
+ if (isEmpty(str)) {
+ return str;
+ }
+ int sz = str.length();
+ char[] chs = new char[sz];
+ int count = 0;
+ for (int i = 0; i < sz; i++) {
+ if (!Character.isWhitespace(str.charAt(i))) {
+ chs[count++] = str.charAt(i);
+ }
+ }
+ if (count == sz) {
+ return str;
+ }
+
+ return new String(chs, 0, count);
+ }
+
+ /**
+ * Html 코드가 들어간 문서를 표시할때 태그에 손상없이 보이기 위한 메서드
+ *
+ * @param strString
+ * @return HTML 태그를 치환한 문자열
+ */
+ public static String checkHtmlView(String strString) {
+ String strNew = "";
+
+ StringBuffer strTxt = new StringBuffer("");
+
+ char chrBuff;
+ int len = strString.length();
+
+ for (int i = 0; i < len; i++) {
+ chrBuff = strString.charAt(i);
+
+ switch (chrBuff) {
+ case '<':
+ strTxt.append("<");
+ break;
+ case '>':
+ strTxt.append(">");
+ break;
+ case '"':
+ strTxt.append(""");
+ break;
+ case 10:
+ strTxt.append("
");
+ break;
+ case ' ':
+ strTxt.append(" ");
+ break;
+ //case '&' :
+ //strTxt.append("&");
+ //break;
+ default:
+ strTxt.append(chrBuff);
+ }
+ }
+
+ strNew = strTxt.toString();
+
+ return strNew;
+ }
+
+ /**
+ * 문자열을 지정한 분리자에 의해 배열로 리턴하는 메서드.
+ * @param source 원본 문자열
+ * @param separator 분리자
+ * @return result 분리자로 나뉘어진 문자열 배열
+ */
+ public static String[] split(String source, String separator) throws NullPointerException {
+ String[] returnVal = null;
+ int cnt = 1;
+
+ int index = source.indexOf(separator);
+ int index0 = 0;
+ while (index >= 0) {
+ cnt++;
+ index = source.indexOf(separator, index + 1);
+ }
+ returnVal = new String[cnt];
+ cnt = 0;
+ index = source.indexOf(separator);
+ while (index >= 0) {
+ returnVal[cnt] = source.substring(index0, index);
+ index0 = index + 1;
+ index = source.indexOf(separator, index + 1);
+ cnt++;
+ }
+ returnVal[cnt] = source.substring(index0);
+
+ return returnVal;
+ }
+
+ /**
+ * {@link String#toLowerCase()}를 이용하여 소문자로 변환한다.
+ *
+ *
+ * StringUtil.lowerCase(null) = null
+ * StringUtil.lowerCase("") = ""
+ * StringUtil.lowerCase("aBc") = "abc"
+ *
+ *
+ * @param str 소문자로 변환되어야 할 문자열
+ * @return 소문자로 변환된 문자열, null이 입력되면 null 리턴
+ */
+ public static String lowerCase(String str) {
+ if (str == null) {
+ return null;
+ }
+
+ return str.toLowerCase();
+ }
+
+ /**
+ * {@link String#toUpperCase()}를 이용하여 대문자로 변환한다.
+ *
+ *
+ * StringUtil.upperCase(null) = null
+ * StringUtil.upperCase("") = ""
+ * StringUtil.upperCase("aBc") = "ABC"
+ *
+ *
+ * @param str 대문자로 변환되어야 할 문자열
+ * @return 대문자로 변환된 문자열, null이 입력되면 null 리턴
+ */
+ public static String upperCase(String str) {
+ if (str == null) {
+ return null;
+ }
+
+ return str.toUpperCase();
+ }
+
+ /**
+ * 입력된 String의 앞쪽에서 두번째 인자로 전달된 문자(stripChars)를 모두 제거한다.
+ *
+ *
+ * StringUtil.stripStart(null, *) = null
+ * StringUtil.stripStart("", *) = ""
+ * StringUtil.stripStart("abc", "") = "abc"
+ * StringUtil.stripStart("abc", null) = "abc"
+ * StringUtil.stripStart(" abc", null) = "abc"
+ * StringUtil.stripStart("abc ", null) = "abc "
+ * StringUtil.stripStart(" abc ", null) = "abc "
+ * StringUtil.stripStart("yxabc ", "xyz") = "abc "
+ *
+ *
+ * @param str 지정된 문자가 제거되어야 할 문자열
+ * @param stripChars 제거대상 문자열
+ * @return 지정된 문자가 제거된 문자열, null이 입력되면 null 리턴
+ */
+ public static String stripStart(String str, String stripChars) {
+ int strLen;
+ if (str == null || (strLen = str.length()) == 0) {
+ return str;
+ }
+ int start = 0;
+ if (stripChars == null) {
+ while ((start != strLen) && Character.isWhitespace(str.charAt(start))) {
+ start++;
+ }
+ } else if (stripChars.length() == 0) {
+ return str;
+ } else {
+ while ((start != strLen) && (stripChars.indexOf(str.charAt(start)) != -1)) {
+ start++;
+ }
+ }
+
+ return str.substring(start);
+ }
+
+ /**
+ * 입력된 String의 뒤쪽에서 두번째 인자로 전달된 문자(stripChars)를 모두 제거한다.
+ *
+ *
+ * StringUtil.stripEnd(null, *) = null
+ * StringUtil.stripEnd("", *) = ""
+ * StringUtil.stripEnd("abc", "") = "abc"
+ * StringUtil.stripEnd("abc", null) = "abc"
+ * StringUtil.stripEnd(" abc", null) = " abc"
+ * StringUtil.stripEnd("abc ", null) = "abc"
+ * StringUtil.stripEnd(" abc ", null) = " abc"
+ * StringUtil.stripEnd(" abcyx", "xyz") = " abc"
+ *
+ *
+ * @param str 지정된 문자가 제거되어야 할 문자열
+ * @param stripChars 제거대상 문자열
+ * @return 지정된 문자가 제거된 문자열, null이 입력되면 null 리턴
+ */
+ public static String stripEnd(String str, String stripChars) {
+ int end;
+ if (str == null || (end = str.length()) == 0) {
+ return str;
+ }
+
+ if (stripChars == null) {
+ while ((end != 0) && Character.isWhitespace(str.charAt(end - 1))) {
+ end--;
+ }
+ } else if (stripChars.length() == 0) {
+ return str;
+ } else {
+ while ((end != 0) && (stripChars.indexOf(str.charAt(end - 1)) != -1)) {
+ end--;
+ }
+ }
+
+ return str.substring(0, end);
+ }
+
+ /**
+ * 입력된 String의 앞, 뒤에서 두번째 인자로 전달된 문자(stripChars)를 모두 제거한다.
+ *
+ *
+ * StringUtil.strip(null, *) = null
+ * StringUtil.strip("", *) = ""
+ * StringUtil.strip("abc", null) = "abc"
+ * StringUtil.strip(" abc", null) = "abc"
+ * StringUtil.strip("abc ", null) = "abc"
+ * StringUtil.strip(" abc ", null) = "abc"
+ * StringUtil.strip(" abcyx", "xyz") = " abc"
+ *
+ *
+ * @param str 지정된 문자가 제거되어야 할 문자열
+ * @param stripChars 제거대상 문자열
+ * @return 지정된 문자가 제거된 문자열, null이 입력되면 null 리턴
+ */
+ public static String strip(String str, String stripChars) {
+ if (isEmpty(str)) {
+ return str;
+ }
+
+ String srcStr = str;
+ srcStr = stripStart(srcStr, stripChars);
+
+ return stripEnd(srcStr, stripChars);
+ }
+
+ /**
+ * 문자열을 지정한 분리자에 의해 지정된 길이의 배열로 리턴하는 메서드.
+ * @param source 원본 문자열
+ * @param separator 분리자
+ * @param arraylength 배열 길이
+ * @return 분리자로 나뉘어진 문자열 배열
+ */
+ public static String[] split(String source, String separator, int arraylength) throws NullPointerException {
+ String[] returnVal = new String[arraylength];
+ int cnt = 0;
+ int index0 = 0;
+ int index = source.indexOf(separator);
+ while (index >= 0 && cnt < (arraylength - 1)) {
+ returnVal[cnt] = source.substring(index0, index);
+ index0 = index + 1;
+ index = source.indexOf(separator, index + 1);
+ cnt++;
+ }
+ returnVal[cnt] = source.substring(index0);
+ if (cnt < (arraylength - 1)) {
+ for (int i = cnt + 1; i < arraylength; i++) {
+ returnVal[i] = "";
+ }
+ }
+
+ return returnVal;
+ }
+
+ /**
+ * 문자열 A에서 Z사이의 랜덤 문자열을 구하는 기능을 제공 시작문자열과 종료문자열 사이의 랜덤 문자열을 구하는 기능
+ *
+ * @param startChr
+ * - 첫 문자
+ * @param endChr
+ * - 마지막문자
+ * @return 랜덤문자
+ * @exception MyException
+ * @see
+ */
+ public static String getRandomStr(char startChr, char endChr) {
+
+ int randomInt;
+ String randomStr = null;
+
+ // 시작문자 및 종료문자를 아스키숫자로 변환한다.
+ int startInt = Integer.valueOf(startChr);
+ int endInt = Integer.valueOf(endChr);
+
+ // 시작문자열이 종료문자열보가 클경우
+ if (startInt > endInt) {
+ throw new IllegalArgumentException("Start String: " + startChr + " End String: " + endChr);
+ }
+
+ do {
+ // 시작문자 및 종료문자 중에서 랜덤 숫자를 발생시킨다.
+ randomInt = rnd.nextInt(endInt + 1);
+ } while (randomInt < startInt); // 입력받은 문자 'A'(65)보다 작으면 다시 랜덤 숫자 발생.
+
+ // 랜덤 숫자를 문자로 변환 후 스트링으로 다시 변환
+ randomStr = (char)randomInt + "";
+
+ // 랜덤문자열를 리턴
+ return randomStr;
+ }
+
+ /**
+ * 문자열을 다양한 문자셋(EUC-KR[KSC5601],UTF-8..)을 사용하여 인코딩하는 기능 역으로 디코딩하여 원래의 문자열을
+ * 복원하는 기능을 제공함 String temp = new String(문자열.getBytes("바꾸기전 인코딩"),"바꿀 인코딩");
+ * String temp = new String(문자열.getBytes("8859_1"),"KSC5601"); => UTF-8 에서
+ * EUC-KR
+ *
+ * @param srcString
+ * - 문자열
+ * @param srcCharsetNm
+ * - 원래 CharsetNm
+ * @param charsetNm
+ * - CharsetNm
+ * @return 인(디)코딩 문자열
+ * @exception MyException
+ * @see
+ */
+ public static String getEncdDcd(String srcString, String srcCharsetNm, String cnvrCharsetNm) {
+
+ String rtnStr = null;
+
+ if (srcString == null) {
+ return null;
+ }
+
+ try {
+ rtnStr = new String(srcString.getBytes(srcCharsetNm), cnvrCharsetNm);
+ } catch (UnsupportedEncodingException e) {
+ rtnStr = null;
+ }
+
+ return rtnStr;
+ }
+
+ /**
+ * 특수문자를 웹 브라우저에서 정상적으로 보이기 위해 특수문자를 처리('<' -> & lT)하는 기능이다
+ * @param srcString - '<'
+ * @return 변환문자열('<' -> "<"
+ * @exception MyException
+ * @see
+ */
+ public static String getSpclStrCnvr(String srcString) {
+
+ String rtnStr = null;
+
+ StringBuffer strTxt = new StringBuffer("");
+
+ char chrBuff;
+ int len = srcString.length();
+
+ for (int i = 0; i < len; i++) {
+ chrBuff = srcString.charAt(i);
+
+ switch (chrBuff) {
+ case '<':
+ strTxt.append("<");
+ break;
+ case '>':
+ strTxt.append(">");
+ break;
+ case '&':
+ strTxt.append("&");
+ break;
+ default:
+ strTxt.append(chrBuff);
+ }
+ }
+
+ rtnStr = strTxt.toString();
+
+ return rtnStr;
+ }
+
+ /**
+ * 응용어플리케이션에서 고유값을 사용하기 위해 시스템에서17자리의TIMESTAMP값을 구하는 기능
+ *
+ * @param
+ * @return Timestamp 값
+ * @exception MyException
+ * @see
+ */
+ public static String getTimeStamp() {
+
+ String rtnStr = null;
+
+ // 문자열로 변환하기 위한 패턴 설정(년도-월-일 시:분:초:초(자정이후 초))
+ String pattern = "yyyyMMddhhmmssSSS";
+
+ SimpleDateFormat sdfCurrent = new SimpleDateFormat(pattern, Locale.KOREA);
+ Timestamp ts = new Timestamp(System.currentTimeMillis());
+
+ rtnStr = sdfCurrent.format(ts.getTime());
+
+ return rtnStr;
+ }
+
+ /**
+ * html의 특수문자를 표현하기 위해
+ *
+ * @param srcString
+ * @return String
+ * @exception Exception
+ * @see
+ */
+ public static String getHtmlStrCnvr(String srcString) {
+
+ String tmpString = srcString;
+
+ tmpString = tmpString.replaceAll("<", "<");
+ tmpString = tmpString.replaceAll(">", ">");
+ tmpString = tmpString.replaceAll("&", "&");
+ tmpString = tmpString.replaceAll(" ", " ");
+ tmpString = tmpString.replaceAll("'", "\'");
+ tmpString = tmpString.replaceAll(""", "\"");
+
+ return tmpString;
+
+ }
+
+ /**
+ * 날짜 형식의 문자열 내부에 마이너스 character(-)를 추가한다.
+ *
+ *
+ * StringUtil.addMinusChar("20100901") = "2010-09-01"
+ *
+ *
+ * @param date 입력받는 문자열
+ * @return " - "가 추가된 입력문자열
+ */
+ public static String addMinusChar(String date) {
+ if (date.length() == 8) {
+ return date.substring(0, 4).concat("-").concat(date.substring(4, 6)).concat("-")
+ .concat(date.substring(6, 8));
+ } else {
+ return "";
+ }
+ }
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/StandardCodeController.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/StandardCodeController.java
new file mode 100644
index 0000000..82ae229
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/StandardCodeController.java
@@ -0,0 +1,134 @@
+package com.dbnt.kcscbackend.standardCode;
+
+import com.dbnt.kcscbackend.config.common.BaseController;
+import com.dbnt.kcscbackend.config.common.LoginVO;
+import com.dbnt.kcscbackend.config.common.ResponseCode;
+import com.dbnt.kcscbackend.config.common.ResultVO;
+import com.dbnt.kcscbackend.standardCode.entity.TnDocumentInfoVO;
+import com.dbnt.kcscbackend.standardCode.service.StandardCodeListService;
+import com.dbnt.kcscbackend.standardCode.service.StandardCodeService;
+import com.dbnt.kcscbackend.standardCode.service.StandardCodeVO;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.egovframe.rte.fdl.property.EgovPropertyService;
+import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+import org.springframework.http.MediaType;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 건설기준코드 관리를 위한 컨트롤러 클래스
+ *
+ *
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2023.10.11 최강석 최초 생성
+ *
+ *
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/standardCode")
+@Tag(name="StandardCodeController",description = "건설기준코드 관리 컨트롤러")
+public class StandardCodeController extends BaseController {
+
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertyService;
+
+ private final StandardCodeService standardCodeService;
+
+ private final StandardCodeListService standardCodeListService;
+
+
+ @Operation(
+ summary = "건설기준코드 트리 조회",
+ description = "건설기준코드 트리 조회",
+ tags = {"StandardCodeController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @PostMapping(value = "/getCodeTree.do", consumes = MediaType.APPLICATION_JSON_VALUE)
+ public ResultVO getCodeTree(@RequestBody StandardCodeVO param, @AuthenticationPrincipal LoginVO user)
+ throws Exception {
+ ResultVO resultVO = new ResultVO();
+ Map resultMap = new HashMap<>();
+ resultMap.put("codeTree", standardCodeService.selectStandardCodeTree());
+ resultVO.setResult(resultMap);
+ return resultVO;
+ }
+
+
+ @Operation(
+ summary = "건설기준코드 내용 조회",
+ description = "건설기준코드 내용 조회",
+ tags = {"StandardCodeController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @PostMapping(value = "/getCodeDetailInfo.do", consumes = MediaType.APPLICATION_JSON_VALUE)
+ public ResultVO getCodeDetailInfo(@RequestBody StandardCodeVO param, @AuthenticationPrincipal LoginVO user)
+ throws Exception {
+ ResultVO resultVO = new ResultVO();
+ Map resultMap = new HashMap<>();
+ resultMap.put("document", standardCodeService.selectStandardCodeDocument(param));
+ resultVO.setResult(resultMap);
+ return resultVO;
+ }
+
+
+ @Operation(
+ summary = "건설기준코드 리스트 조회",
+ description = "건설기준코드 리스트 조회",
+ tags = {"StandardCodeController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @PostMapping(value = "/selectStandardCodeList.do", consumes = MediaType.APPLICATION_JSON_VALUE)
+ public ResultVO selectStandardCodeList(@RequestBody TnDocumentInfoVO tnDocumentInfoVO, @AuthenticationPrincipal LoginVO user)
+ throws Exception {
+ ResultVO resultVO = new ResultVO();
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(tnDocumentInfoVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(propertyService.getInt("Globals.pageUnit"));
+ paginationInfo.setPageSize(propertyService.getInt("Globals.pageSize"));
+
+ System.out.println("@@@ pageIndex : " + tnDocumentInfoVO.getPageIndex());
+
+ tnDocumentInfoVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ tnDocumentInfoVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ tnDocumentInfoVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map resultMap = standardCodeListService.selectStandardCodeList(tnDocumentInfoVO);
+
+ int totCnt = Integer.parseInt((String)resultMap.get("resultCnt"));
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ resultMap.put("tnDocumentInfoVO", tnDocumentInfoVO);
+ resultMap.put("paginationInfo", paginationInfo);
+ resultMap.put("user", user);
+
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ resultVO.setResultMessage(ResponseCode.SUCCESS.getMessage());
+ resultVO.setResult(resultMap);
+ return resultVO;
+ }
+}
\ No newline at end of file
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/entity/TnDocumentContent.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/entity/TnDocumentContent.java
new file mode 100644
index 0000000..8d083d5
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/entity/TnDocumentContent.java
@@ -0,0 +1,67 @@
+package com.dbnt.kcscbackend.standardCode.entity;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.*;
+import java.time.LocalDateTime;
+
+@Getter
+@Setter
+@Entity
+@NoArgsConstructor
+@DynamicInsert
+@DynamicUpdate
+@Table(name = "tn_document_content")
+public class TnDocumentContent {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "doc_cont_seq")
+ private Integer docContSeq;
+ @Column(name = "doc_info_seq")
+ private Integer docInfoSeq;
+ @Column(name = "cont_order")
+ private Integer contOrder;
+ @Column(name = "onto_link_cd")
+ private String ontoLinkCd;
+ @Column(name = "group_title")
+ private String groupTitle;
+ @Column(name = "cont_type_cd")
+ private String contTypeCd;
+ @Column(name = "cont_level")
+ private Integer contLevel;
+ @Column(name = "parent_cont_seq")
+ private Integer parentContSeq;
+ @Column(name = "cont_label")
+ private String contLabel;
+ @Column(name = "table_content")
+ private String tableContent;
+ @Column(name = "full_content")
+ private String fullContent;
+ @Column(name = "cont_rev_yn")
+ private String contRevYn;
+ @Column(name = "cont_abolish_yn")
+ private String contAbolishYn;
+ @Column(name = "doc_rev_hist_seq")
+ private Integer docRevHistSeq;
+ @Column(name = "frst_crt_id")
+ private String frstCrtId;
+ @Column(name = "frst_crt_dt")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime frstCrtDt;
+ @Column(name = "last_chg_id")
+ private String lastChgId;
+ @Column(name = "last_chg_dt")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime lastChgDt;
+ @Column(name = "use_yn")
+ private String useYn;
+ @Column(name = "error_cd")
+ private String errorCd;
+ @Column(name = "old_seq")
+ private Integer oldSeq;
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/entity/TnDocumentGroup.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/entity/TnDocumentGroup.java
new file mode 100644
index 0000000..e3df7d0
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/entity/TnDocumentGroup.java
@@ -0,0 +1,61 @@
+package com.dbnt.kcscbackend.standardCode.entity;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.*;
+import java.time.LocalDateTime;
+
+@Getter
+@Setter
+@Entity
+@NoArgsConstructor
+@DynamicInsert
+@DynamicUpdate
+@Table(name = "tn_document_group")
+public class TnDocumentGroup {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "group_seq")
+ private Integer groupSeq;
+ @Column(name = "group_full_cd")
+ private String groupFullCd;
+ @Column(name = "kcsc_cd")
+ private String kcscCd;
+ @Column(name = "group_cur_cd")
+ private String groupCurCd;
+ @Column(name = "group_nm")
+ private String groupNm;
+ @Column(name = "group_type")
+ private String groupType;
+ @Column(name = "item_cd")
+ private String itemCd;
+ @Column(name = "doc_type")
+ private Integer docType;
+ @Column(name = "doc_level")
+ private Integer docLevel;
+ @Column(name = "doc_order")
+ private Integer docOrder;
+ @Column(name = "parent_group_seq")
+ private Integer parentGroupSeq;
+ @Column(name = "rvsn_remark")
+ private String rvsnRemark;
+ @Column(name = "frst_crt_id")
+ private String frstCrtId;
+ @Column(name = "frst_crt_dt")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime frstCrtDt;
+ @Column(name = "last_chg_id")
+ private String lastChgId;
+ @Column(name = "last_chg_dt")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime lastChgDt;
+ @Column(name = "use_yn")
+ private String useYn;
+ @Column(name = "old_seq")
+ private Integer oldSeq;
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/entity/TnDocumentInfo.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/entity/TnDocumentInfo.java
new file mode 100644
index 0000000..f33643f
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/entity/TnDocumentInfo.java
@@ -0,0 +1,88 @@
+package com.dbnt.kcscbackend.standardCode.entity;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Getter
+@Setter
+@Entity
+@NoArgsConstructor
+@DynamicInsert
+@DynamicUpdate
+@Table(name = "tn_document_info")
+public class TnDocumentInfo {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "doc_info_seq")
+ private int docInfoSeq;
+ @Column(name = "group_seq", nullable = false)
+ private int groupSeq;
+ @Column(name = "kcsc_cd")
+ private String kcscCd;
+ @Column(name = "old_kcsc_cd")
+ private String oldKcscCd;
+ @Column(name = "doc_nm", nullable = false)
+ private String docNm;
+ @Column(name = "doc_yr", nullable = false)
+ private String docYr;
+ @Column(name = "doc_cycl", nullable = false)
+ private int docCycl;
+ @Column(name = "doc_er", nullable = false)
+ private String docEr;
+ @Column(name = "estb_ymd")
+ @Temporal(TemporalType.DATE)
+ private Date estbYmd;
+ @Column(name = "rvsn_ymd")
+ @Temporal(TemporalType.DATE)
+ private Date rvsnYmd;
+ @Column(name = "doc_rev_hist_seq")
+ private int docRevHistSeq;
+ @Column(name = "doc_brief", length = 1000)
+ private String docBrief;
+ @Column(name = "doc_rvsn_remark", length = 1000)
+ private String docRvsnRemark;
+ @Column(name = "doc_consider", length = 255)
+ private String docConsider;
+ @Column(name = "doc_advice", length = 255)
+ private String docAdvice;
+ @Column(name = "doc_dept", length = 255)
+ private String docDept;
+ @Column(name = "doc_relation", length = 255)
+ private String docRelation;
+ @Column(name = "doc_publish", length = 255)
+ private String docPublish;
+ @Column(name = "aplcn_bgng_ymd")
+ @Temporal(TemporalType.DATE)
+ private Date aplcnBgngYmd;
+ @Column(name = "aplcn_end_ymd")
+ @Temporal(TemporalType.DATE)
+ private Date aplcnEndYmd;
+ @Column(name = "doc_order", nullable = false)
+ private int docOrder;
+ @Column(name = "last_yn", nullable = false)
+ private char lastYn;
+ @Column(name = "doc_file_grp_id")
+ private String docFileGrpId;
+ @Column(name = "rvsn_file_grp_id")
+ private String rvsnFileGrpId;
+ @Column(name = "frst_crt_id", nullable = false)
+ private String frstCrtId;
+ @Column(name = "frst_crt_dt", nullable = false)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date frstCrtDt;
+ @Column(name = "last_chg_id")
+ private String lastChgId;
+ @Column(name = "last_chg_dt")
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date lastChgDt;
+ @Column(name = "use_yn", nullable = false)
+ private char useYn;
+ @Column(name = "old_seq")
+ private Integer oldSeq;
+}
\ No newline at end of file
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/entity/TnDocumentInfoVO.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/entity/TnDocumentInfoVO.java
new file mode 100644
index 0000000..5793604
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/entity/TnDocumentInfoVO.java
@@ -0,0 +1,104 @@
+package com.dbnt.kcscbackend.standardCode.entity;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Getter
+@Setter
+@Entity
+@NoArgsConstructor
+@DynamicInsert
+@DynamicUpdate
+@Table(name = "tn_document_info")
+public class TnDocumentInfoVO extends TnDocumentInfo {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "doc_info_seq")
+ private int docInfoSeq;
+ @Column(name = "group_seq", nullable = false)
+ private int groupSeq;
+ @Column(name = "kcsc_cd")
+ private String kcscCd;
+ @Column(name = "old_kcsc_cd")
+ private String oldKcscCd;
+ @Column(name = "doc_nm", nullable = false)
+ private String docNm;
+ @Column(name = "doc_yr", nullable = false)
+ private String docYr;
+ @Column(name = "doc_cycl", nullable = false)
+ private int docCycl;
+ @Column(name = "doc_er", nullable = false)
+ private String docEr;
+ @Column(name = "estb_ymd")
+ @Temporal(TemporalType.DATE)
+ private Date estbYmd;
+ @Column(name = "rvsn_ymd")
+ @Temporal(TemporalType.DATE)
+ private Date rvsnYmd;
+ @Column(name = "doc_rev_hist_seq")
+ private int docRevHistSeq;
+ @Column(name = "doc_brief", length = 1000)
+ private String docBrief;
+ @Column(name = "doc_rvsn_remark", length = 1000)
+ private String docRvsnRemark;
+ @Column(name = "doc_consider", length = 255)
+ private String docConsider;
+ @Column(name = "doc_advice", length = 255)
+ private String docAdvice;
+ @Column(name = "doc_dept", length = 255)
+ private String docDept;
+ @Column(name = "doc_relation", length = 255)
+ private String docRelation;
+ @Column(name = "doc_publish", length = 255)
+ private String docPublish;
+ @Column(name = "aplcn_bgng_ymd")
+ @Temporal(TemporalType.DATE)
+ private Date aplcnBgngYmd;
+ @Column(name = "aplcn_end_ymd")
+ @Temporal(TemporalType.DATE)
+ private Date aplcnEndYmd;
+ @Column(name = "doc_order", nullable = false)
+ private int docOrder;
+ @Column(name = "last_yn", nullable = false)
+ private char lastYn;
+ @Column(name = "doc_file_grp_id")
+ private String docFileGrpId;
+ @Column(name = "rvsn_file_grp_id")
+ private String rvsnFileGrpId;
+ @Column(name = "frst_crt_id", nullable = false)
+ private String frstCrtId;
+ @Column(name = "frst_crt_dt", nullable = false)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date frstCrtDt;
+ @Column(name = "last_chg_id")
+ private String lastChgId;
+ @Column(name = "last_chg_dt")
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date lastChgDt;
+ @Column(name = "use_yn", nullable = false)
+ private char useYn;
+ @Column(name = "old_seq")
+ private Integer oldSeq;
+
+ @Schema(description = "현재페이지")
+ private int pageIndex = 1;
+ @Schema(description = "페이지갯수")
+ private int pageUnit = 10;
+ @Schema(description = "페이지사이즈")
+ private int pageSize = 10;
+ @Schema(description = "첫페이지 인덱스")
+ private int firstIndex = 1;
+ @Schema(description = "마지막페이지 인덱스")
+ private int lastIndex = 1;
+ @Schema(description = "페이지당 레코드 개수")
+ private int recordCountPerPage = 10;
+ @Schema(description = "레코드 번호")
+ private int rowNo = 0;
+}
\ No newline at end of file
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/mapper/StandardCodeMapper.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/mapper/StandardCodeMapper.java
new file mode 100644
index 0000000..a535234
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/mapper/StandardCodeMapper.java
@@ -0,0 +1,17 @@
+package com.dbnt.kcscbackend.standardCode.mapper;
+
+
+import com.dbnt.kcscbackend.standardCode.entity.TnDocumentInfo;
+import com.dbnt.kcscbackend.standardCode.entity.TnDocumentInfoVO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface StandardCodeMapper {
+
+ List selectStandardCodeList(TnDocumentInfo tnDocumentInfo);
+
+ Integer selectStandardCodeListCnt(TnDocumentInfo tnDocumentInfo);
+
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/repository/TnDocumentContentRepository.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/repository/TnDocumentContentRepository.java
new file mode 100644
index 0000000..4a3812b
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/repository/TnDocumentContentRepository.java
@@ -0,0 +1,16 @@
+package com.dbnt.kcscbackend.standardCode.repository;
+
+
+import com.dbnt.kcscbackend.standardCode.entity.TnDocumentContent;
+import com.dbnt.kcscbackend.standardCode.service.StandardCodeContentInterface;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+public interface TnDocumentContentRepository extends JpaRepository {
+
+ @Query(value = "select * from get_recent_full_context_by_content(:docCode, :docPart)", nativeQuery = true)
+ public List getRecentFullContextByContent(String docCode, String docPart);
+
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/repository/TnDocumentGroupRepository.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/repository/TnDocumentGroupRepository.java
new file mode 100644
index 0000000..0b744bc
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/repository/TnDocumentGroupRepository.java
@@ -0,0 +1,15 @@
+package com.dbnt.kcscbackend.standardCode.repository;
+
+import com.dbnt.kcscbackend.standardCode.entity.TnDocumentGroup;
+import com.dbnt.kcscbackend.standardCode.service.StandardCodeTreeInterface;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+public interface TnDocumentGroupRepository extends JpaRepository {
+
+ @Query(value = "select * from sp_get_tn_document_code_by_tree()", nativeQuery = true)
+ public List spGetTnDocumentCodeByTree();
+
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/repository/TnDocumentInfoRepository.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/repository/TnDocumentInfoRepository.java
new file mode 100644
index 0000000..d346e01
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/repository/TnDocumentInfoRepository.java
@@ -0,0 +1,8 @@
+package com.dbnt.kcscbackend.standardCode.repository;
+
+import com.dbnt.kcscbackend.standardCode.entity.TnDocumentInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface TnDocumentInfoRepository extends JpaRepository {
+
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeContentInterface.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeContentInterface.java
new file mode 100644
index 0000000..41c2abe
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeContentInterface.java
@@ -0,0 +1,13 @@
+package com.dbnt.kcscbackend.standardCode.service;
+
+public interface StandardCodeContentInterface {
+ String getOnto_link_cd();
+ String getGroup_title();
+ String getCont_type_cd();
+ Integer getCont_level();
+ Integer getParent_cont_seq();
+ String getCont_label();
+ String getError_cd();
+ String getTable_content();
+ String getFull_content();
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeListService.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeListService.java
new file mode 100644
index 0000000..94294dc
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeListService.java
@@ -0,0 +1,38 @@
+package com.dbnt.kcscbackend.standardCode.service;
+
+
+import com.dbnt.kcscbackend.standardCode.entity.TnDocumentInfoVO;
+
+import java.util.Map;
+
+/**
+ * 게시물 관리를 위한 서비스 인터페이스 클래스
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009.03.19
+ * @version 1.0
+ * @see
+ *
+ *
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.19 이삼섭 최초 생성
+ * 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성
+ *
+ *
+ */
+public interface StandardCodeListService {
+
+ /**
+ * 조건에 맞는 게시물 목록을 조회 한다.
+ * @return
+ *
+ * @param
+ * @param
+ * @exception Exception Exception
+ */
+ public Map selectStandardCodeList(TnDocumentInfoVO tnDocumentInfoVO)
+ throws Exception;
+
+}
\ No newline at end of file
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeService.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeService.java
new file mode 100644
index 0000000..20a4727
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeService.java
@@ -0,0 +1,34 @@
+package com.dbnt.kcscbackend.standardCode.service;
+
+import com.dbnt.kcscbackend.standardCode.repository.TnDocumentContentRepository;
+import com.dbnt.kcscbackend.standardCode.repository.TnDocumentGroupRepository;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+@Transactional
+@RequiredArgsConstructor
+public class StandardCodeService {
+ private final TnDocumentGroupRepository tnDocumentGroupRepository;
+ private final TnDocumentContentRepository tnDocumentContentRepository;
+
+ public List selectStandardCodeTree(){
+ return tnDocumentGroupRepository.spGetTnDocumentCodeByTree();
+ }
+
+ public List selectStandardCodeDocument(StandardCodeVO param) {
+ return tnDocumentContentRepository.getRecentFullContextByContent(param.getDocCode(), param.getDocPart());
+ }
+
+ /*public List selectStandardCodeList(TnDocumentInfo tnDocumentInfo) {
+ return standardCodeMapper.selectStandardCodeList(tnDocumentInfo);
+ }
+
+ public Integer selectStandardCodeListCnt(TnDocumentInfo tnDocumentInfo) {
+ return standardCodeMapper.selectStandardCodeListCnt(tnDocumentInfo);
+ }*/
+
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeTreeInterface.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeTreeInterface.java
new file mode 100644
index 0000000..3938b95
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeTreeInterface.java
@@ -0,0 +1,11 @@
+package com.dbnt.kcscbackend.standardCode.service;
+
+public interface StandardCodeTreeInterface {
+ Integer getSeq();
+ Integer getDoc_level();
+ Integer getParent_seq();
+ String getGroup_yn();
+ String getDoc_code();
+ String getDoc_code_ver();
+ String getDoc_code_name();
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeVO.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeVO.java
new file mode 100644
index 0000000..0a1a85b
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/StandardCodeVO.java
@@ -0,0 +1,11 @@
+package com.dbnt.kcscbackend.standardCode.service;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class StandardCodeVO {
+ private String docCode;
+ private String docPart;
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/impl/StandardCodeListServiceImpl.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/impl/StandardCodeListServiceImpl.java
new file mode 100644
index 0000000..65d2a5e
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/standardCode/service/impl/StandardCodeListServiceImpl.java
@@ -0,0 +1,60 @@
+package com.dbnt.kcscbackend.standardCode.service.impl;
+
+
+import com.dbnt.kcscbackend.standardCode.entity.TnDocumentInfoVO;
+import com.dbnt.kcscbackend.standardCode.mapper.StandardCodeMapper;
+import com.dbnt.kcscbackend.standardCode.service.StandardCodeListService;
+import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 게시물 관리를 위한 서비스 구현 클래스
+ * @author 공통 서비스 개발팀 한성곤
+ * @since 2009.03.19
+ * @version 1.0
+ * @see
+ *
+ *
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.19 이삼섭 최초 생성
+ * 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성
+ *
+ *
+ */
+@Service("StandardCodeListService")
+public class StandardCodeListServiceImpl extends EgovAbstractServiceImpl implements StandardCodeListService {
+
+ private StandardCodeMapper standardCodeMapper;
+
+ /**
+ * 조건에 맞는 게시물 목록을 조회 한다.
+ *
+ * @see
+ */
+ @Override
+ public Map selectStandardCodeList(TnDocumentInfoVO tnDocumentInfoVO) throws Exception {
+ List list = standardCodeMapper.selectStandardCodeList(tnDocumentInfoVO);
+ List result = new ArrayList();
+
+ result = list;
+
+ int cnt = standardCodeMapper.selectStandardCodeListCnt(tnDocumentInfoVO);
+
+ Map map = new HashMap();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+}
diff --git a/kcsc-back-end/src/main/resources/application-dev.properties b/kcsc-back-end/src/main/resources/application-dev.properties
index a2418f1..6dc2759 100644
--- a/kcsc-back-end/src/main/resources/application-dev.properties
+++ b/kcsc-back-end/src/main/resources/application-dev.properties
@@ -1,6 +1,5 @@
spring.devtools.livereload.enabled=true
-
#Datasource Configuration
spring.sql.init.encoding=utf-8
#maximum-pool-size: CPU core count
@@ -19,5 +18,10 @@ spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.
# MyBatis
mybatis.mapper-locations: mybatisMapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
-mybatis.type-aliases-package=com.dbnt.kcscbackend.**.model
-logging.level.com.atoz_develop.mybatissample.repository=TRACE
\ No newline at end of file
+mybatis.type-aliases-package=com.dbnt.kcscbackend.**.entity
+logging.level.com.atoz_develop.mybatissample.repository=TRACE
+
+# File Config
+Globals.posblAtchFileSize=5242880
+Globals.fileStorePath=D:\\kcsc
+Globals.addedOptions=false
\ No newline at end of file
diff --git a/kcsc-back-end/src/main/resources/application.properties b/kcsc-back-end/src/main/resources/application.properties
new file mode 100644
index 0000000..e2bf8dc
--- /dev/null
+++ b/kcsc-back-end/src/main/resources/application.properties
@@ -0,0 +1,11 @@
+spring.mvc.pathmatch.matching-strategy=ant_path_matcher
+
+# Page Config
+Globals.pageUnit=10
+Globals.pageSize=10
+
+# Access-Control-Allow-Origin
+Globals.Allow.Origin = http://localhost:3000
+
+#JWT secret key
+Globals.jwt.secret = egovframe
diff --git a/kcsc-back-end/src/main/resources/log4jdbc.log4j2.properties b/kcsc-back-end/src/main/resources/log4jdbc.log4j2.properties
new file mode 100644
index 0000000..a48b3e9
--- /dev/null
+++ b/kcsc-back-end/src/main/resources/log4jdbc.log4j2.properties
@@ -0,0 +1,2 @@
+log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
+log4jdbc.dump.sql.maxlinelength=0
\ No newline at end of file
diff --git a/kcsc-back-end/src/main/resources/mybatisMapper/StandardCodeMapper.xml b/kcsc-back-end/src/main/resources/mybatisMapper/StandardCodeMapper.xml
new file mode 100644
index 0000000..07b8658
--- /dev/null
+++ b/kcsc-back-end/src/main/resources/mybatisMapper/StandardCodeMapper.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file