Initial commit

This commit is contained in:
jade
2026-07-03 17:47:03 +09:00
commit 1bebb681fe
103 changed files with 5225 additions and 0 deletions

24
.gitattributes vendored Normal file
View File

@@ -0,0 +1,24 @@
# 기본값: 모든 텍스트 파일 CRLF (Windows 개발 환경)
* text=auto eol=crlf
# Shell 스크립트는 LF 고정 (Linux CI/CD 실행 환경)
*.sh text eol=lf
mvnw text eol=lf
# 바이너리 파일 (줄바꿈 변환 제외)
*.jar binary
*.war binary
*.ear binary
*.class binary
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.svg binary
*.ttf binary
*.woff binary
*.woff2binary
*.pdf binary
*.zip binary
*.tar.gz binary

64
.gitignore vendored Normal file
View File

@@ -0,0 +1,64 @@
# ===== 빌드 결과물 =====
target/
!**/src/main/**/target/
!**/src/test/**/target/
*.class
*.jar
*.war
*.ear
*.nar
# ===== 로그 =====
*.log
logs/
spring-shell.log
# ===== Maven =====
.mvn/wrapper/maven-wrapper.jar
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# ===== IntelliJ IDEA =====
.idea/
*.iws
*.iml
*.ipr
out/
# ===== Eclipse / STS =====
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
# ===== NetBeans =====
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
# ===== VS Code =====
.vscode/
# ===== OS =====
.DS_Store
Thumbs.db
ehthumbs.db
# ===== 환경설정 (민감정보 분리 시) =====
# application-local.properties
# application-secret.properties

19
.mvn/wrapper/maven-wrapper.properties vendored Normal file
View File

@@ -0,0 +1,19 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip

32
HELP.md Normal file
View File

@@ -0,0 +1,32 @@
# Read Me First
The following was discovered as part of building this project:
* The original package name 'io.shinhanlife.chat-backend' is invalid and this project uses 'io.shinhanlife.chatbackend' instead.
# Getting Started
### Reference Documentation
For further reference, please consider the following sections:
* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html)
* [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/3.5.3/maven-plugin)
* [Create an OCI image](https://docs.spring.io/spring-boot/3.5.3/maven-plugin/build-image.html)
* [Spring Web](https://docs.spring.io/spring-boot/3.5.3/reference/web/servlet.html)
* [Spring Session for Spring Data Redis](https://docs.spring.io/spring-session/reference/)
* [Spring Data JPA](https://docs.spring.io/spring-boot/3.5.3/reference/data/sql.html#data.sql.jpa-and-spring-data)
### Guides
The following guides illustrate how to use some features concretely:
* [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/)
* [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/)
* [Building REST services with Spring](https://spring.io/guides/tutorials/rest/)
* [Accessing Data with JPA](https://spring.io/guides/gs/accessing-data-jpa/)
### Maven Parent overrides
Due to Maven's design, elements are inherited from the parent POM to the project POM.
While most of the inheritance is fine, it also inherits unwanted elements like `<license>` and `<developers>` from the parent.
To prevent this, the project POM contains empty overrides for these elements.
If you manually switch to a different parent and actually want the inheritance, you need to remove those overrides.

184
README.md Normal file
View File

@@ -0,0 +1,184 @@
# AXHUB Backend
Spring Boot 기반 AXHUB 관리자 백엔드 API 서버입니다.
---
## 환경
| 항목 | 버전 |
|------|------|
| Java | 17 |
| Spring Boot | 3.5.x |
| Build Tool | Maven |
| 주요 라이브러리 | MyBatis, Lombok, MapStruct, P6Spy |
| 데이터베이스 | H2 (in-memory, 로컬 개발용) |
| 세션 저장소 | Redis |
---
## 실행 방법
`AxHubAdminApplication.java`를 실행합니다.
```
src/main/java/io/shinhanlife/AxHubAdminApplication.java
```
- IDE: 클래스 우클릭 → **Run 'AxHubAdminApplication'**
- CLI: `./mvnw spring-boot:run`
- 기본 포트: `8080`
- H2 콘솔: `http://localhost:8080/h2-console` (로컬 환경에서만 활성화)
---
## 패키지 구조
```
io.shinhanlife
├── AxHubAdminApplication.java
├── axhub/
│ ├── biz/ # 업무 도메인
│ │ ├── sm/mmg/ # 메뉴 관리 (System Management - Menu Management)
│ │ └── so/atm/ # 접근 권한 관리 (System Operation - Access Management)
│ │
│ ├── common/ # 공통 모듈
│ │ ├── config/ # Spring 설정 (CORS 등)
│ │ ├── session/ # 세션/SSO 처리 (biz와 동일한 레이어 구조)
│ │ └── util/ # 유틸리티
│ │
│ └── sample/ # 개발 참고용 샘플
└── glow/ # Glow 프레임워크 호환 패키지 (하단 참고)
```
각 업무 패키지(`biz/**`, `common/session`, `sample`)는 아래 **5개 레이어**로 구성됩니다.
---
## 레이어 구조
```
{업무패키지}/
├── presentation/ ← HTTP 진입점
│ └── io/ ← Request / Response 객체
├── usecase/ ← 비즈니스 흐름 제어
│ └── impl/
├── dto/ ← 레이어 간 데이터 전달
├── domain/ ← 핵심 비즈니스 로직
│ ├── model/ ← 도메인 엔티티
│ ├── repository/ ← DB 접근 인터페이스 (MyBatis Mapper)
│ └── service/ ← 도메인 서비스
│ └── impl/
└── converter/ ← 객체 변환 (MapStruct)
```
### presentation
**역할**: HTTP 요청을 받아 UseCase를 호출하고 응답을 반환합니다. 비즈니스 로직을 포함하지 않습니다.
- `@RestController` 클래스
- `io/` 하위에 해당 API 전용 Request/Response 클래스를 위치시킵니다.
- Presentation이 직접 알아야 하는 타입은 `io/`의 Request/Response와 UseCase 인터페이스뿐입니다.
```
presentation/
├── SmNmg0100MController.java # @RestController
└── io/
├── SmNmg0100M01RRequest.java # 조회 요청
└── SmNmg0100M01RResponse.java # 조회 응답
```
---
### usecase
**역할**: 하나의 업무 흐름(시나리오)을 조율합니다. 여러 Domain Service 또는 Repository를 순서에 맞게 호출하며, 트랜잭션 경계를 정의합니다.
- 인터페이스(`UseCase`)와 구현체(`impl/UseCaseImpl`)를 분리합니다.
- Presentation → **UseCase** → Domain 방향으로만 호출합니다.
- DTO를 입출력 타입으로 사용합니다.
```java
public interface SmNmg0100MUseCase {
List<MenuOutDto> getMenuList(MenuInDto inDto);
void saveMenu(MenuSaveInDto inDto);
}
```
---
### dto
**역할**: 레이어 간 데이터를 운반하는 순수 데이터 객체입니다.
- 비즈니스 로직을 포함하지 않습니다.
- Presentation의 `io/` Request/Response와 구분됩니다.
- `io/` → HTTP 스펙에 종속된 입출력
- `dto/` → 내부 레이어 간 전달용
- Converter가 `io/ ↔ dto ↔ domain model` 간 변환을 담당합니다.
---
### domain
**역할**: 핵심 비즈니스 규칙과 DB 접근을 담당합니다.
- **`model/`**: 도메인 엔티티. DB 테이블에 대응하는 객체입니다.
- **`repository/`**: MyBatis Mapper 인터페이스. SQL은 `resources/mapper/` 하위 XML에 작성합니다.
- **`service/`**: 단일 도메인 내 재사용 가능한 비즈니스 로직. UseCase가 호출합니다.
> UseCase와 Service의 구분 기준: 여러 업무에서 재사용 가능한 단위 로직은 `domain/service`, 특정 업무 흐름의 조율은 `usecase`에 둡니다.
---
### converter
**역할**: 레이어 간 객체 변환을 전담합니다. MapStruct를 사용합니다.
- `Request → DTO`, `DTO → Model`, `Model → DTO`, `DTO → Response` 변환을 처리합니다.
- Presentation과 UseCase가 직접 매핑 코드를 작성하지 않도록 분리합니다.
```java
@Mapper(componentModel = "spring")
public interface MenuConverter {
MenuInDto toDto(SmNmg0100M01RRequest request);
MenuOutDto toDto(ZtMenu model);
}
```
---
## 호출 흐름
```
HTTP 요청
└─▶ presentation (Controller)
│ Request → DTO (Converter)
└─▶ usecase (UseCase)
│ 비즈니스 흐름 조율
└─▶ domain/service (Service)
└─▶ domain/repository (Mapper)
└─▶ DB (H2 / 운영 DB)
```
---
## io.shinhanlife.glow 패키지
Glow 프레임워크(사내 공통 프레임워크) 호환을 위해 **임시로** 만들어놓은 패키지입니다.
추후 Glow 라이브러리 의존성으로 대체될 예정이며, 현재는 로컬 소스 형태로 포함되어 있습니다.
| 클래스 | 역할 |
|--------|------|
| `BaseResponse` / `ResponseUtil` | 공통 API 응답 래퍼 |
| `BaseException` / `BizException` | 공통 예외 |
| `ResponseCode` | 응답 코드 정의 |
| `GlowIndexPaging` / `PageInfo` | 페이징 |
| `GlowLogger` | 로깅 |
| `GlowMybatisMapper` | MyBatis Mapper 기반 인터페이스 |
| `GlowAppServiceId` 등 | 서비스/컨트롤러 식별 애노테이션 |
| `db/dto/AuditInfo` | 등록자/수정자 공통 필드 |

259
mvnw vendored Normal file
View File

@@ -0,0 +1,259 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Apache Maven Wrapper startup batch script, version 3.3.2
#
# Optional ENV vars
# -----------------
# JAVA_HOME - location of a JDK home dir, required when download maven via java source
# MVNW_REPOURL - repo url base for downloading maven distribution
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
# ----------------------------------------------------------------------------
set -euf
[ "${MVNW_VERBOSE-}" != debug ] || set -x
# OS specific support.
native_path() { printf %s\\n "$1"; }
case "$(uname)" in
CYGWIN* | MINGW*)
[ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
native_path() { cygpath --path --windows "$1"; }
;;
esac
# set JAVACMD and JAVACCMD
set_java_home() {
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
if [ -n "${JAVA_HOME-}" ]; then
if [ -x "$JAVA_HOME/jre/sh/java" ]; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACCMD="$JAVA_HOME/jre/sh/javac"
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACCMD="$JAVA_HOME/bin/javac"
if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
return 1
fi
fi
else
JAVACMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v java
)" || :
JAVACCMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v javac
)" || :
if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
return 1
fi
fi
}
# hash string like Java String::hashCode
hash_string() {
str="${1:-}" h=0
while [ -n "$str" ]; do
char="${str%"${str#?}"}"
h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
str="${str#?}"
done
printf %x\\n $h
}
verbose() { :; }
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
die() {
printf %s\\n "$1" >&2
exit 1
}
trim() {
# MWRAPPER-139:
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
# Needed for removing poorly interpreted newline sequences when running in more
# exotic environments such as mingw bash on Windows.
printf "%s" "${1}" | tr -d '[:space:]'
}
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
while IFS="=" read -r key value; do
case "${key-}" in
distributionUrl) distributionUrl=$(trim "${value-}") ;;
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
esac
done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
case "${distributionUrl##*/}" in
maven-mvnd-*bin.*)
MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
:Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
:Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
:Linux*x86_64*) distributionPlatform=linux-amd64 ;;
*)
echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
distributionPlatform=linux-amd64
;;
esac
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
;;
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
esac
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
distributionUrlName="${distributionUrl##*/}"
distributionUrlNameMain="${distributionUrlName%.*}"
distributionUrlNameMain="${distributionUrlNameMain%-bin}"
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
exec_maven() {
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
}
if [ -d "$MAVEN_HOME" ]; then
verbose "found existing MAVEN_HOME at $MAVEN_HOME"
exec_maven "$@"
fi
case "${distributionUrl-}" in
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
esac
# prepare tmp dir
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
trap clean HUP INT TERM EXIT
else
die "cannot create temp dir"
fi
mkdir -p -- "${MAVEN_HOME%/*}"
# Download and Install Apache Maven
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
verbose "Downloading from: $distributionUrl"
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
# select .zip or .tar.gz
if ! command -v unzip >/dev/null; then
distributionUrl="${distributionUrl%.zip}.tar.gz"
distributionUrlName="${distributionUrl##*/}"
fi
# verbose opt
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
# normalize http auth
case "${MVNW_PASSWORD:+has-password}" in
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
esac
if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
verbose "Found wget ... using wget"
wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
verbose "Found curl ... using curl"
curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
elif set_java_home; then
verbose "Falling back to use Java to download"
javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
cat >"$javaSource" <<-END
public class Downloader extends java.net.Authenticator
{
protected java.net.PasswordAuthentication getPasswordAuthentication()
{
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
}
public static void main( String[] args ) throws Exception
{
setDefault( new Downloader() );
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
}
}
END
# For Cygwin/MinGW, switch paths to Windows format before running javac and java
verbose " - Compiling Downloader.java ..."
"$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
verbose " - Running Downloader.java ..."
"$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
fi
# If specified, validate the SHA-256 sum of the Maven distribution zip file
if [ -n "${distributionSha256Sum-}" ]; then
distributionSha256Result=false
if [ "$MVN_CMD" = mvnd.sh ]; then
echo "Checksum validation is not supported for maven-mvnd." >&2
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
elif command -v sha256sum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
elif command -v shasum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
fi
if [ $distributionSha256Result = false ]; then
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
exit 1
fi
fi
# unzip and move
if command -v unzip >/dev/null; then
unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
else
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
fi
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
clean || :
exec_maven "$@"

149
mvnw.cmd vendored Normal file
View File

@@ -0,0 +1,149 @@
<# : batch portion
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Apache Maven Wrapper startup batch script, version 3.3.2
@REM
@REM Optional ENV vars
@REM MVNW_REPOURL - repo url base for downloading maven distribution
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
@REM ----------------------------------------------------------------------------
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
@SET __MVNW_CMD__=
@SET __MVNW_ERROR__=
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
@SET PSModulePath=
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
)
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
@SET __MVNW_PSMODULEP_SAVE=
@SET __MVNW_ARG0_NAME__=
@SET MVNW_USERNAME=
@SET MVNW_PASSWORD=
@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
@echo Cannot start maven from wrapper >&2 && exit /b 1
@GOTO :EOF
: end batch / begin powershell #>
$ErrorActionPreference = "Stop"
if ($env:MVNW_VERBOSE -eq "true") {
$VerbosePreference = "Continue"
}
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
if (!$distributionUrl) {
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
}
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
"maven-mvnd-*" {
$USE_MVND = $true
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
$MVN_CMD = "mvnd.cmd"
break
}
default {
$USE_MVND = $false
$MVN_CMD = $script -replace '^mvnw','mvn'
break
}
}
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
if ($env:MVNW_REPOURL) {
$MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
}
$distributionUrlName = $distributionUrl -replace '^.*/',''
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
if ($env:MAVEN_USER_HOME) {
$MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
}
$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
exit $?
}
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
}
# prepare tmp dir
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
trap {
if ($TMP_DOWNLOAD_DIR.Exists) {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
}
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
# Download and Install Apache Maven
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
Write-Verbose "Downloading from: $distributionUrl"
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
$webclient = New-Object System.Net.WebClient
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
# If specified, validate the SHA-256 sum of the Maven distribution zip file
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
if ($distributionSha256Sum) {
if ($USE_MVND) {
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
}
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
}
}
# unzip and move
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
try {
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
} catch {
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
Write-Error "fail to move MAVEN_HOME"
}
} finally {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"

118
pom.xml Normal file
View File

@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.shinhanlife</groupId>
<artifactId>axhub-admin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Axhub-admin</name>
<description>Demo project for Spring Boot</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
<mapstruct.version>1.5.5.Final</mapstruct.version> <!-- 추가 -->
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- H2 Database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- Lettuce-core 명시적 추가 (NoClassDefFoundError 해결) -->
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
<version>6.6.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- p6spy -->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.14.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<annotationProcessorPaths>
<!-- ⚠️ Lombok이 반드시 MapStruct보다 먼저 와야 함 -->
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<!-- MapStruct 프로세서 -->
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin> </plugins>
</build>
</project>

283
sql.txt Normal file
View File

@@ -0,0 +1,283 @@
--------------------------------------------------------------------------------
-- 적용시스템명 : 운영계(ORACLE)
-- 테이블 : ZT_통합코드
-- 테이블ID : ZT_UNFC_CD
--------------------------------------------------------------------------------
CREATE TABLE S_NNZ.ZT_UNFC_CD
(
UNFC_CD_ID VARCHAR2(50) NOT NULL,
UNFC_CD_NM VARCHAR2(100) NULL,
UNFC_CD_HAN_NM VARCHAR2(100) NULL,
UNFC_CD_ENG_NM VARCHAR2(100) NULL,
UNFC_CD_DS VARCHAR2(4000) NULL,
META_SYST_CD VARCHAR2(3) NOT NULL,
META_DUTJ_TYPE_CD VARCHAR2(5) NOT NULL,
PUSE_YN VARCHAR2(1) NOT NULL,
SPPO_UNFC_CD_ID VARCHAR2(50) NULL,
DATA_LOAD_DT DATE NULL,
SYST_RGI_DT DATE NOT NULL,
SYST_RGI_PRAF_NO VARCHAR2(8) NOT NULL,
SYST_RGI_OGNZ_NO VARCHAR2(7) NOT NULL,
SYST_RGI_SYST_CD VARCHAR2(3) NOT NULL,
SYST_RGI_PRGR_ID VARCHAR2(100) NOT NULL,
SYST_CHG_DT DATE NOT NULL,
SYST_CHG_PRAF_NO VARCHAR2(8) NOT NULL,
SYST_CHG_OGNZ_NO VARCHAR2(7) NOT NULL,
SYST_CHG_SYST_CD VARCHAR2(3) NOT NULL,
SYST_CHG_PRGR_ID VARCHAR2(100) NOT NULL
)
TABLESPACE TS_ZT_D01;
COMMENT ON TABLE S_NNZ.ZT_UNFC_CD IS 'ZT_통합코드';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.UNFC_CD_ID IS '통합코드ID';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.UNFC_CD_NM IS '통합코드명';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.UNFC_CD_HAN_NM IS '통합코드한글명';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.UNFC_CD_ENG_NM IS '통합코드영문명';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.UNFC_CD_DS IS '통합코드설명';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.META_SYST_CD IS '메타시스템코드';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.META_DUTJ_TYPE_CD IS '메타업무유형코드';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.PUSE_YN IS '사용여부';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.SPPO_UNFC_CD_ID IS '상위통합코드ID';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.DATA_LOAD_DT IS '데이터적재일시';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.SYST_RGI_DT IS '시스템등록일시';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.SYST_RGI_PRAF_NO IS '시스템등록인사번호';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.SYST_RGI_OGNZ_NO IS '시스템등록조직번호';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.SYST_RGI_SYST_CD IS '시스템등록시스템코드';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.SYST_RGI_PRGR_ID IS '시스템등록프로그램ID';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.SYST_CHG_DT IS '시스템변경일시';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.SYST_CHG_PRAF_NO IS '시스템변경인사번호';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.SYST_CHG_OGNZ_NO IS '시스템변경조직번호';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.SYST_CHG_SYST_CD IS '시스템변경시스템코드';
COMMENT ON COLUMN S_NNZ.ZT_UNFC_CD.SYST_CHG_PRGR_ID IS '시스템변경프로그램ID';
-- 개별권한 Role
GRANT SELECT ON S_NNZ.ZT_UNFC_CD TO RL_A_EAI_NNZ_SEL;
GRANT INSERT,UPDATE,DELETE ON S_NNZ.ZT_UNFC_CD TO RL_A_EAI_NNZ_IUD;
-- Default Role
GRANT SELECT ON S_NNZ.ZT_UNFC_CD TO RL_NNZ_SEL;
GRANT INSERT,UPDATE,DELETE ON S_NNZ.ZT_UNFC_CD TO RL_NNZ_IUD;
CREATE INDEX S_NNZ.IX_ZT_UNFC_CD_01 ON S_NNZ.ZT_UNFC_CD
(UNFC_CD_NM)
TABLESPACE TS_ZT_I01;
CREATE INDEX S_NNZ.IX_ZT_UNFC_CD_02 ON S_NNZ.ZT_UNFC_CD
(UNFC_CD_HAN_NM)
TABLESPACE TS_ZT_I01;
CREATE INDEX S_NNZ.IX_ZT_UNFC_CD_03 ON S_NNZ.ZT_UNFC_CD
(UNFC_CD_ENG_NM)
TABLESPACE TS_ZT_I01;
CREATE UNIQUE INDEX S_NNZ.PK_ZT_UNFC_CD ON S_NNZ.ZT_UNFC_CD
(UNFC_CD_ID)
TABLESPACE TS_ZT_I01;
ALTER TABLE S_NNZ.ZT_UNFC_CD ADD (
CONSTRAINT PK_ZT_UNFC_CD
PRIMARY KEY (UNFC_CD_ID)
USING INDEX S_NNZ.PK_ZT_UNFC_CD);
--------------------------------------------------------------------------------
-- 적용시스템명 : 개발계(ORACLE)
-- 테이블 : ZT_통합코드상세
-- 테이블ID : ZT_UNFC_CD_DTPT
--------------------------------------------------------------------------------
CREATE TABLE S_TFG.ZT_UNFC_CD_DTPT
(
UNFC_CD_ID VARCHAR2(50) NOT NULL,
CD_VLDT_VALU VARCHAR2(50) NOT NULL,
CD_VLDT_VALU_INQR_SEQ NUMBER(5) NULL,
CD_VLDT_VALU_NM VARCHAR2(400) NULL,
CD_VLDT_VALU_HNGL_ABR_NM VARCHAR2(200) NULL,
CD_VLDT_VALU_ENGC_ABR_NM VARCHAR2(200) NULL,
CD_VLDT_VALU_HAN_NM VARCHAR2(400) NULL,
CD_VLDT_VALU_ENG_NM VARCHAR2(400) NULL,
CD_VLDT_VALU_DS VARCHAR2(4000) NULL,
CD_ASRT_TYPE_BIT_CD VARCHAR2(20) NOT NULL,
SPPO_CD_VLDT_VALU VARCHAR2(50) NULL,
SPPO_UNFC_CD_ID VARCHAR2(50) NULL,
VLDT_STRT_YMD DATE NOT NULL,
VLDT_END_YMD DATE NOT NULL,
USER_DEF_VALU_1 VARCHAR2(100) NULL,
USER_DEF_VALU_2 VARCHAR2(100) NULL,
SYST_RGI_DT DATE NOT NULL,
SYST_RGI_PRAF_NO VARCHAR2(8) NOT NULL,
SYST_RGI_OGNZ_NO VARCHAR2(7) NOT NULL,
SYST_RGI_SYST_CD VARCHAR2(3) NOT NULL,
SYST_RGI_PRGR_ID VARCHAR2(100) NOT NULL,
SYST_CHG_DT DATE NOT NULL,
SYST_CHG_PRAF_NO VARCHAR2(8) NOT NULL,
SYST_CHG_OGNZ_NO VARCHAR2(7) NOT NULL,
SYST_CHG_SYST_CD VARCHAR2(3) NOT NULL,
SYST_CHG_PRGR_ID VARCHAR2(100) NOT NULL,
DATA_LOAD_DT DATE NOT NULL
)
TABLESPACE TS_TFG_D01;
COMMENT ON TABLE S_TFG.ZT_UNFC_CD_DTPT IS 'ZT_통합코드상세';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.UNFC_CD_ID IS '통합코드ID';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.CD_VLDT_VALU IS '코드유효값';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.CD_VLDT_VALU_INQR_SEQ IS '코드유효값조회순서';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.CD_VLDT_VALU_NM IS '코드유효값명';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.CD_VLDT_VALU_HNGL_ABR_NM IS '코드유효값한글약어명';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.CD_VLDT_VALU_ENGC_ABR_NM IS '코드유효값영문약어명';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.CD_VLDT_VALU_HAN_NM IS '코드유효값한글명';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.CD_VLDT_VALU_ENG_NM IS '코드유효값영문명';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.CD_VLDT_VALU_DS IS '코드유효값설명';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.CD_ASRT_TYPE_BIT_CD IS '코드분류유형비트코드';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.SPPO_CD_VLDT_VALU IS '상위코드유효값';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.SPPO_UNFC_CD_ID IS '상위통합코드ID';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.VLDT_STRT_YMD IS '유효시작일자';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.VLDT_END_YMD IS '유효종료일자';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.USER_DEF_VALU_1 IS '사용자정의값1';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.USER_DEF_VALU_2 IS '사용자정의값2';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.SYST_RGI_DT IS '시스템등록일시';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.SYST_RGI_PRAF_NO IS '시스템등록인사번호';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.SYST_RGI_OGNZ_NO IS '시스템등록조직번호';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.SYST_RGI_SYST_CD IS '시스템등록시스템코드';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.SYST_RGI_PRGR_ID IS '시스템등록프로그램ID';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.SYST_CHG_DT IS '시스템변경일시';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.SYST_CHG_PRAF_NO IS '시스템변경인사번호';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.SYST_CHG_OGNZ_NO IS '시스템변경조직번호';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.SYST_CHG_SYST_CD IS '시스템변경시스템코드';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.SYST_CHG_PRGR_ID IS '시스템변경프로그램ID';
COMMENT ON COLUMN S_TFG.ZT_UNFC_CD_DTPT.DATA_LOAD_DT IS '데이터적재일시';
-- Default Role
GRANT INSERT,UPDATE,DELETE ON S_TFG.ZT_UNFC_CD_DTPT TO RL_TFG_IUD;
GRANT SELECT ON S_TFG.ZT_UNFC_CD_DTPT TO RL_TFG_SEL;
CREATE UNIQUE INDEX S_TFG.PK_ZT_UNFC_CD_DTPT ON S_TFG.ZT_UNFC_CD_DTPT
(UNFC_CD_ID,CD_VLDT_VALU)
TABLESPACE TS_TFG_I01;
ALTER TABLE S_TFG.ZT_UNFC_CD_DTPT ADD (
CONSTRAINT PK_ZT_UNFC_CD_DTPT
PRIMARY KEY (UNFC_CD_ID,CD_VLDT_VALU)
USING INDEX S_TFG.PK_ZT_UNFC_CD_DTPT);
-------------------------------------------------------------------------------------------
-- ZT_MENU 테이블 생성 (메뉴 기본 정보 저장)
CREATE TABLE ZT_MENU (
MENU_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -- 자동 증가 ID (PK)
PARENT_MENU_ID INTEGER, -- 부모 메뉴 ID (FK, NULL 가능 for 루트 메뉴)
NAME VARCHAR(100), -- 컴포넌트 이름 (옵셔널)
PATH VARCHAR(255) NOT NULL, -- 라우트 경로 (필수)
TITLE VARCHAR(100) NOT NULL, -- 메뉴 이름 (meta.title, 필수)
ICON VARCHAR(50), -- 메뉴 아이콘 (옵셔널)
SHOW_BADGE VARCHAR(1) DEFAULT 'N' CHECK (SHOW_BADGE IN ('Y', 'N')), -- 배지 표시 여부 (Y/N, 옵셔널)
SHOW_TEXT_BADGE VARCHAR(50), -- 텍스트 배지 표시 (옵셔널)
IS_HIDE VARCHAR(1) DEFAULT 'N' CHECK (IS_HIDE IN ('Y', 'N')), -- 메뉴 숨김 여부 (Y/N, 옵셔널)
IS_HIDE_TAB VARCHAR(1) DEFAULT 'N' CHECK (IS_HIDE_TAB IN ('Y', 'N')),-- 탭 숨김 여부 (Y/N, 옵셔널)
LINK VARCHAR(255), -- 링크 (옵셔널)
IS_IFRAME VARCHAR(1) DEFAULT 'N' CHECK (IS_IFRAME IN ('Y', 'N')), -- iframe 여부 (Y/N, 옵셔널)
KEEP_ALIVE VARCHAR(1) DEFAULT 'N' CHECK (KEEP_ALIVE IN ('Y', 'N')), -- 캐시 여부 (Y/N, 옵셔널)
ORDER_SEQ INTEGER DEFAULT 0 NOT NULL, -- 메뉴 표시 순서 (정렬용, 필수)
IS_ACTIVE VARCHAR(1) DEFAULT 'Y' CHECK (IS_ACTIVE IN ('Y', 'N')), -- 활성 여부 (Y/N, 기본 Y)
SYST_RGI_DT DATE, -- 시스템등록일시
SYST_RGI_PRAF_NO VARCHAR(50), -- 시스템등록인사번호
SYST_RGI_OGNZ_NO VARCHAR(50), -- 시스템등록조직번호
SYST_RGI_SYST_CD VARCHAR(50), -- 시스템등록시스템코드
SYST_RGI_PRGR_ID VARCHAR(50), -- 시스템등록프로그램ID
SYST_CHG_DT DATE, -- 시스템변경일시
SYST_CHG_PRAF_NO VARCHAR(50), -- 시스템변경인사번호
SYST_CHG_OGNZ_NO VARCHAR(50), -- 시스템변경조직번호
SYST_CHG_SYST_CD VARCHAR(50), -- 시스템변경시스템코드
SYST_CHG_PRGR_ID VARCHAR(50) -- 시스템변경프로그램ID
);
-- 제약 조건 추가
ALTER TABLE ZT_MENU ADD CONSTRAINT FK_ZT_MENU_PARENT FOREIGN KEY (PARENT_MENU_ID) REFERENCES ZT_MENU (MENU_ID) ON DELETE CASCADE; -- 부모 삭제 시 자식도 삭제 (계층 삭제 지원)
-- 인덱스 생성 (조회 최적화)
CREATE INDEX IDX_ZT_MENU_PARENT ON ZT_MENU (PARENT_MENU_ID);
CREATE INDEX IDX_ZT_MENU_PATH ON ZT_MENU (PATH);
-- 컬럼 코멘트 추가
COMMENT ON COLUMN ZT_MENU.MENU_ID IS '메뉴 ID (PK)';
COMMENT ON COLUMN ZT_MENU.PARENT_MENU_ID IS '부모 메뉴 ID (FK)';
COMMENT ON COLUMN ZT_MENU.NAME IS '컴포넌트 이름';
COMMENT ON COLUMN ZT_MENU.PATH IS '라우트 경로';
COMMENT ON COLUMN ZT_MENU.TITLE IS '메뉴 이름';
COMMENT ON COLUMN ZT_MENU.ICON IS '메뉴 아이콘';
COMMENT ON COLUMN ZT_MENU.SHOW_BADGE IS '배지 표시 여부 (Y/N)';
COMMENT ON COLUMN ZT_MENU.SHOW_TEXT_BADGE IS '텍스트 배지 표시';
COMMENT ON COLUMN ZT_MENU.IS_HIDE IS '메뉴 숨김 여부 (Y/N)';
COMMENT ON COLUMN ZT_MENU.IS_HIDE_TAB IS '탭 숨김 여부 (Y/N)';
COMMENT ON COLUMN ZT_MENU.LINK IS '링크';
COMMENT ON COLUMN ZT_MENU.IS_IFRAME IS 'iframe 여부 (Y/N)';
COMMENT ON COLUMN ZT_MENU.KEEP_ALIVE IS '캐시 여부 (Y/N)';
COMMENT ON COLUMN ZT_MENU.ORDER_SEQ IS '메뉴 표시 순서';
COMMENT ON COLUMN ZT_MENU.IS_ACTIVE IS '활성 여부 (Y/N)';
COMMENT ON COLUMN ZT_MENU.SYST_RGI_DT IS '시스템등록일시';
COMMENT ON COLUMN ZT_MENU.SYST_RGI_PRAF_NO IS '시스템등록인사번호';
COMMENT ON COLUMN ZT_MENU.SYST_RGI_OGNZ_NO IS '시스템등록조직번호';
COMMENT ON COLUMN ZT_MENU.SYST_RGI_SYST_CD IS '시스템등록시스템코드';
COMMENT ON COLUMN ZT_MENU.SYST_RGI_PRGR_ID IS '시스템등록프로그램ID';
COMMENT ON COLUMN ZT_MENU.SYST_CHG_DT IS '시스템변경일시';
COMMENT ON COLUMN ZT_MENU.SYST_CHG_PRAF_NO IS '시스템변경인사번호';
COMMENT ON COLUMN ZT_MENU.SYST_CHG_OGNZ_NO IS '시스템변경조직번호';
COMMENT ON COLUMN ZT_MENU.SYST_CHG_SYST_CD IS '시스템변경시스템코드';
COMMENT ON COLUMN ZT_MENU.SYST_CHG_PRGR_ID IS '시스템변경프로그램ID';
-- ZT_MENU_AUTH 테이블 생성 (메뉴 권한 목록 저장)
CREATE TABLE ZT_MENU_AUTH (
AUTH_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -- 자동 증가 ID (PK)
MENU_ID INTEGER NOT NULL, -- 메뉴 ID (FK)
TITLE VARCHAR(100) NOT NULL, -- 권한 제목 (e.g., ''추가'', ''편집'')
AUTH_MARK VARCHAR(100) NOT NULL, -- 권한 마크 (e.g., ''add'', ''edit'')
ORDER_SEQ INTEGER DEFAULT 0 NOT NULL, -- 권한 표시 순서 (정렬용)
SYST_RGI_DT DATE, -- 시스템등록일시
SYST_RGI_PRAF_NO VARCHAR(50), -- 시스템등록인사번호
SYST_RGI_OGNZ_NO VARCHAR(50), -- 시스템등록조직번호
SYST_RGI_SYST_CD VARCHAR(50), -- 시스템등록시스템코드
SYST_RGI_PRGR_ID VARCHAR(50), -- 시스템등록프로그램ID
SYST_CHG_DT DATE, -- 시스템변경일시
SYST_CHG_PRAF_NO VARCHAR(50), -- 시스템변경인사번호
SYST_CHG_OGNZ_NO VARCHAR(50), -- 시스템변경조직번호
SYST_CHG_SYST_CD VARCHAR(50), -- 시스템변경시스템코드
SYST_CHG_PRGR_ID VARCHAR(50) -- 시스템변경프로그램ID
);
-- 제약 조건 추가
ALTER TABLE ZT_MENU_AUTH ADD CONSTRAINT FK_ZT_MENU_AUTH_MENU FOREIGN KEY (MENU_ID) REFERENCES ZT_MENU (MENU_ID) ON DELETE CASCADE; -- 메뉴 삭제 시 권한도 삭제
-- 인덱스 생성
CREATE INDEX IDX_ZT_MENU_AUTH_MENU ON ZT_MENU_AUTH (MENU_ID);
-- 컬럼 코멘트 추가
COMMENT ON COLUMN ZT_MENU_AUTH.AUTH_ID IS '권한 ID (PK)';
COMMENT ON COLUMN ZT_MENU_AUTH.MENU_ID IS '메뉴 ID (FK)';
COMMENT ON COLUMN ZT_MENU_AUTH.TITLE IS '권한 제목';
COMMENT ON COLUMN ZT_MENU_AUTH.AUTH_MARK IS '권한 마크';
COMMENT ON COLUMN ZT_MENU_AUTH.ORDER_SEQ IS '권한 표시 순서';
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_RGI_DT IS '시스템등록일시';
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_RGI_PRAF_NO IS '시스템등록인사번호';
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_RGI_OGNZ_NO IS '시스템등록조직번호';
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_RGI_SYST_CD IS '시스템등록시스템코드';
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_RGI_PRGR_ID IS '시스템등록프로그램ID';
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_CHG_DT IS '시스템변경일시';
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_CHG_PRAF_NO IS '시스템변경인사번호';
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_CHG_OGNZ_NO IS '시스템변경조직번호';
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_CHG_SYST_CD IS '시스템변경시스템코드';
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_CHG_PRGR_ID IS '시스템변경프로그램ID';

View File

@@ -0,0 +1,14 @@
package io.shinhanlife;
import io.shinhanlife.glow.GlowMybatisMapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan(basePackages = "io.shinhanlife", annotationClass = GlowMybatisMapper.class) // @GlowMybatisMapper 어노테이션이 있는 인터페이스만 스캔
public class AxHubAdminApplication {
public static void main(String[] args) {
SpringApplication.run(AxHubAdminApplication.class, args);
}
}

View File

@@ -0,0 +1,19 @@
package io.shinhanlife.axhub.biz.sm.mmg.converter;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuInDto;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuListDto;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmMmg0000M01RRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmMmg0000M01RResponse;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public abstract class MenuConverter {
public abstract MenuInDto smMmg0000M01RRequestToMenuInDto(SmMmg0000M01RRequest req);
public abstract MenuListDto smMmg0000M01RResponseToMenuListDto(SmMmg0000M01RResponse res);
public abstract SmMmg0000M01RResponse menuListDtoeToSmMmg0000M01RResponse(MenuListDto res);
}

View File

@@ -0,0 +1,61 @@
package io.shinhanlife.axhub.biz.sm.mmg.domain.model;
import io.shinhanlife.glow.db.dto.AuditInfo;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* ZtMenu은 ZT_MENU 테이블을 매핑하는 Entity 클래스입니다.
* 이 클래스는 테이블의 컬럼을 Java 필드로 매핑합니다.
*
* @Data: Lombok을 통해 getter, setter 등을 자동 생성.
*/
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class ZtMenu extends AuditInfo {
// 메뉴 ID (PK)
private Integer menuId;
// 부모 메뉴 ID (FK)
private Integer parentMenuId;
// 컴포넌트 이름
private String name;
// 라우트 경로
private String path;
// 메뉴 이름
private String title;
// 메뉴 아이콘
private String icon;
// 메뉴 숨김 여부 (Y/N)
private String isHide;
// 탭 숨김 여부 (Y/N)
private String isHideTab;
// 링크
private String link;
// iframe 여부 (Y/N)
private String isIframe;
// 캐시 여부 (Y/N)
private String keepAlive;
// 메뉴 표시 순서
private Integer orderSeq;
// 활성 여부 (Y/N)
private String isActive;
}

View File

@@ -0,0 +1,25 @@
package io.shinhanlife.axhub.biz.sm.mmg.domain.repository;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuInDto;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuOutDto;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuSaveInDto;
import io.shinhanlife.glow.GlowMybatisMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@GlowMybatisMapper
public interface MenuRepository {
List<MenuOutDto> selectMenu(MenuInDto dto);
MenuOutDto selectMenuById(@Param("menuId") Integer menuId);
void insertMenu(MenuSaveInDto dto);
void updateMenu(MenuSaveInDto dto);
void deleteMenu(@Param("menuId") Integer menuId);
}

View File

@@ -0,0 +1,20 @@
package io.shinhanlife.axhub.biz.sm.mmg.domain.service.impl;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuInDto;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuListDto;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuOutDto;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuSaveInDto;
import java.util.List;
public interface MenuService {
List<MenuListDto> selectMenu(MenuInDto dto);
MenuOutDto findById(Integer menuId);
Integer save(MenuSaveInDto dto);
void delete(Integer menuId);
}

View File

@@ -0,0 +1,117 @@
package io.shinhanlife.axhub.biz.sm.mmg.domain.service.impl;
import io.shinhanlife.axhub.biz.sm.mmg.domain.repository.MenuRepository;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuInDto;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuListDto;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuOutDto;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuSaveInDto;
import io.shinhanlife.axhub.common.util.SessionUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class MenuServiceImpl implements MenuService {
private final MenuRepository menuRepository;
@Override
public List<MenuListDto> selectMenu(MenuInDto dto) {
List<MenuOutDto> allMenus = menuRepository.selectMenu(dto);
// 비루트 메뉴(부모 ID가 null이 아닌)만 그룹핑하여 맵 생성
Map<Integer, List<MenuOutDto>> menuMap = allMenus.stream()
.filter(menu -> menu.getParentMenuId() != null)
.collect(Collectors.groupingBy(MenuOutDto::getParentMenuId));
// 루트 메뉴 (parentMenuId == null)
List<MenuOutDto> roots = allMenus.stream()
.filter(menu -> menu.getParentMenuId() == null)
.collect(Collectors.toList());
// 트리 빌드
List<MenuListDto> menuList = buildTree(roots, menuMap);
return menuList;
}
private List<MenuListDto> buildTree(List<MenuOutDto> menus, Map<Integer, List<MenuOutDto>> menuMap) {
List<MenuListDto> dtos = new ArrayList<>();
for (MenuOutDto menu : menus) {
MenuListDto dto = convertToDto(menu);
List<MenuOutDto> children = menuMap.getOrDefault(menu.getMenuId(), new ArrayList<>());
if (!children.isEmpty()) {
dto.setChildren(buildTree(children, menuMap));
}
dtos.add(dto);
}
return dtos;
}
@Override
public MenuOutDto findById(Integer menuId) {
return menuRepository.selectMenuById(menuId);
}
@Override
@Transactional
public Integer save(MenuSaveInDto dto) {
Date now = new Date();
String prafNo = SessionUtil.getPrafNo();
String ognzNo = SessionUtil.getOgnzNo();
if (dto.getIsActive() == null) dto.setIsActive("Y");
if (dto.getIsHide() == null) dto.setIsHide("N");
if (dto.getIsHideTab() == null) dto.setIsHideTab("N");
if (dto.getIsIframe() == null) dto.setIsIframe("N");
if (dto.getKeepAlive() == null) dto.setKeepAlive("N");
if (dto.getOrderSeq() == null) dto.setOrderSeq(0);
dto.setSystChgDt(now);
dto.setSystChgPrafNo(prafNo);
dto.setSystChgOgnzNo(ognzNo);
dto.setSystChgSystCd("AXH");
dto.setSystChgPrgrId("SMNMG0100M");
if (dto.getMenuId() == null) {
dto.setSystRgiDt(now);
dto.setSystRgiPrafNo(prafNo);
dto.setSystRgiOgnzNo(ognzNo);
dto.setSystRgiSystCd("AXH");
dto.setSystRgiPrgrId("SMNMG0100M");
menuRepository.insertMenu(dto);
} else {
menuRepository.updateMenu(dto);
}
return dto.getMenuId();
}
@Override
@Transactional
public void delete(Integer menuId) {
menuRepository.deleteMenu(menuId);
}
private MenuListDto convertToDto(MenuOutDto menu) {
MenuListDto.Meta meta = new MenuListDto.Meta();
meta.setTitle(menu.getTitle());
meta.setIcon(menu.getIcon());
meta.setHide("Y".equals(menu.getIsHide()));
meta.setHideTab("Y".equals(menu.getIsHideTab()));
meta.setLink(menu.getLink());
meta.setIframe("Y".equals(menu.getIsIframe()));
meta.setKeepAlive("Y".equals(menu.getKeepAlive()));
meta.setOrderSeq(menu.getOrderSeq());
meta.setActive("Y".equals(menu.getIsActive()));
return MenuListDto.builder().id(menu.getMenuId()).name(menu.getName()).path(menu.getPath()).meta(meta).build();
}
}

View File

@@ -0,0 +1,22 @@
package io.shinhanlife.axhub.biz.sm.mmg.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
@AllArgsConstructor
public class MenuInDto {
public MenuInDto() {
setIsActive("Y");
}
private String isActive; // 기본 활성 메뉴만
private String path; // 라우트 경로
private String title; // 기본 활성 메뉴만
}

View File

@@ -0,0 +1,90 @@
package io.shinhanlife.axhub.biz.sm.mmg.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* MenuDto는 Vue의 MenuListType에 맞춘 DTO입니다.
* 트리 구조를 지원하며, meta 객체 포함.
* @Data: Lombok을 통해 getter, setter 등을 자동 생성.
*/
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MenuListDto {
private Integer id;
private Integer parentMenuId;
private String name;
private String path;
private Meta meta;
private List<MenuListDto> children;
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Meta {
private String title;
private String icon;
private boolean showBadge;
private String showTextBadge;
private boolean hide;
private boolean hideTab;
private String link;
private boolean iframe;
private boolean keepAlive;
// 메뉴 표시 순서
private Integer orderSeq;
// 활성 여부
private boolean isActive;
@JsonProperty("isHide")
public boolean isHide() {
return hide;
}
@JsonProperty("isHide")
public void setHide(boolean hide) {
this.hide = hide;
}
@JsonProperty("isHideTab")
public boolean isHideTab() {
return hideTab;
}
@JsonProperty("isHideTab")
public void setHideTab(boolean hideTab) {
this.hideTab = hideTab;
}
@JsonProperty("isIframe")
public boolean isIframe() {
return iframe;
}
@JsonProperty("isIframe")
public void setIframe(boolean iframe) {
this.iframe = iframe;
}
@JsonProperty("isActive")
public boolean isActive() {
return isActive;
}
@JsonProperty("isActive")
public void setActive(boolean isActive) {
this.isActive = isActive;
}
}
}

View File

@@ -0,0 +1,53 @@
package io.shinhanlife.axhub.biz.sm.mmg.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
@AllArgsConstructor
public class MenuOutDto {
// 메뉴 ID (PK)
private Integer menuId;
// 부모 메뉴 ID (FK)
private Integer parentMenuId;
// 컴포넌트 이름
private String name;
// 라우트 경로
private String path;
// 메뉴 이름
private String title;
// 메뉴 아이콘
private String icon;
// 메뉴 숨김 여부 (Y/N)
private String isHide;
// 탭 숨김 여부 (Y/N)
private String isHideTab;
// 링크
private String link;
// iframe 여부 (Y/N)
private String isIframe;
// 캐시 여부 (Y/N)
private String keepAlive;
// 메뉴 표시 순서
private Integer orderSeq;
// 활성 여부 (Y/N)
private String isActive;
}

View File

@@ -0,0 +1,39 @@
package io.shinhanlife.axhub.biz.sm.mmg.dto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
@NoArgsConstructor
public class MenuSaveInDto {
private Integer menuId;
private Integer parentMenuId;
private String name;
private String path;
private String title;
private String icon;
private String isHide;
private String isHideTab;
private String link;
private String isIframe;
private String keepAlive;
private Integer orderSeq;
private String isActive;
private Date systRgiDt;
private String systRgiPrafNo;
private String systRgiOgnzNo;
private String systRgiSystCd;
private String systRgiPrgrId;
private Date systChgDt;
private String systChgPrafNo;
private String systChgOgnzNo;
private String systChgSystCd;
private String systChgPrgrId;
}

View File

@@ -0,0 +1,30 @@
package io.shinhanlife.axhub.biz.sm.mmg.presentation;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmMmg0000M01RRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmMmg0000M01RResponse;
import io.shinhanlife.axhub.biz.sm.mmg.usecase.SmMmg0000MUseCase;
import io.shinhanlife.glow.BaseResponse;
import io.shinhanlife.glow.GlowControllerId;
import java.util.List;
import io.shinhanlife.glow.ResponseUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
public class SmMmg0000MController {
private final SmMmg0000MUseCase smMmg0000MUseCase;
@PostMapping("SMMMG0000M01R")
@GlowControllerId("SMMMG0000M01R")
public ResponseEntity<BaseResponse<List<SmMmg0000M01RResponse>>> SMMMG0000M01R(@RequestBody SmMmg0000M01RRequest req) {
return ResponseUtil.ok(smMmg0000MUseCase.selectMenu(req));
}
}

View File

@@ -0,0 +1,47 @@
package io.shinhanlife.axhub.biz.sm.mmg.presentation;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01DRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01RRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01RResponse;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01SRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01SResponse;
import io.shinhanlife.axhub.biz.sm.mmg.usecase.SmNmg0100MUseCase;
import io.shinhanlife.glow.BaseResponse;
import io.shinhanlife.glow.GlowControllerId;
import io.shinhanlife.glow.ResponseUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequiredArgsConstructor
public class SmNmg0100MController {
private final SmNmg0100MUseCase useCase;
@PostMapping("SMNMG0100M01R")
@GlowControllerId("SMNMG0100M01R")
public ResponseEntity<BaseResponse<List<SmNmg0100M01RResponse>>> SMNMG0100M01R(
@RequestBody SmNmg0100M01RRequest req) {
return ResponseUtil.ok(useCase.selectMenu(req));
}
@PostMapping("SMNMG0100M01S")
@GlowControllerId("SMNMG0100M01S")
public ResponseEntity<BaseResponse<SmNmg0100M01SResponse>> SMNMG0100M01S(
@RequestBody SmNmg0100M01SRequest req) {
return ResponseUtil.ok(useCase.saveMenu(req));
}
@PostMapping("SMNMG0100M01D")
@GlowControllerId("SMNMG0100M01D")
public ResponseEntity<BaseResponse<Void>> SMNMG0100M01D(
@RequestBody SmNmg0100M01DRequest req) {
useCase.deleteMenu(req);
return ResponseUtil.ok(null);
}
}

View File

@@ -0,0 +1,19 @@
package io.shinhanlife.axhub.biz.sm.mmg.presentation.io;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
@AllArgsConstructor
public class SmMmg0000M01RRequest {
public SmMmg0000M01RRequest() {
this.isActive = "Y";
}
private String isActive; // 기본 활성 메뉴만
private String path; // 라우트 경로
private String title; // 기본 활성 메뉴만
}

View File

@@ -0,0 +1,87 @@
package io.shinhanlife.axhub.biz.sm.mmg.presentation.io;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuListDto;
import java.util.List;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class SmMmg0000M01RResponse {
private Integer id;
private Integer parentMenuId;
private String name;
private String path;
private MenuListDto.Meta meta;
private List<MenuListDto> children;
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Meta {
private String title;
private String icon;
private boolean showBadge;
private String showTextBadge;
private boolean hide;
private boolean hideTab;
private String link;
private boolean iframe;
private boolean keepAlive;
// 메뉴 표시 순서
private Integer orderSeq;
// 활성 여부
private boolean isActive;
@JsonProperty("isHide")
public boolean isHide() {
return hide;
}
@JsonProperty("isHide")
public void setHide(boolean hide) {
this.hide = hide;
}
@JsonProperty("isHideTab")
public boolean isHideTab() {
return hideTab;
}
@JsonProperty("isHideTab")
public void setHideTab(boolean hideTab) {
this.hideTab = hideTab;
}
@JsonProperty("isIframe")
public boolean isIframe() {
return iframe;
}
@JsonProperty("isIframe")
public void setIframe(boolean iframe) {
this.iframe = iframe;
}
@JsonProperty("isActive")
public boolean isActive() {
return isActive;
}
@JsonProperty("isActive")
public void setActive(boolean isActive) {
this.isActive = isActive;
}
}
}

View File

@@ -0,0 +1,11 @@
package io.shinhanlife.axhub.biz.sm.mmg.presentation.io;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SmNmg0100M01DRequest {
private Integer menuId;
}

View File

@@ -0,0 +1,13 @@
package io.shinhanlife.axhub.biz.sm.mmg.presentation.io;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SmNmg0100M01RRequest {
private String isActive;
private String path;
private String title;
}

View File

@@ -0,0 +1,70 @@
package io.shinhanlife.axhub.biz.sm.mmg.presentation.io;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SmNmg0100M01RResponse {
private Integer id;
private Integer parentMenuId;
private String name;
private String path;
private Meta meta;
private List<SmNmg0100M01RResponse> children;
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Meta {
private String title;
private String icon;
private String link;
private Integer orderSeq;
private boolean hide;
private boolean hideTab;
private boolean iframe;
private boolean keepAlive;
private boolean active;
@JsonProperty("isHide")
public boolean isHide() { return hide; }
@JsonProperty("isHide")
public void setHide(boolean hide) { this.hide = hide; }
@JsonProperty("isHideTab")
public boolean isHideTab() { return hideTab; }
@JsonProperty("isHideTab")
public void setHideTab(boolean hideTab) { this.hideTab = hideTab; }
@JsonProperty("isIframe")
public boolean isIframe() { return iframe; }
@JsonProperty("isIframe")
public void setIframe(boolean iframe) { this.iframe = iframe; }
@JsonProperty("keepAlive")
public boolean isKeepAlive() { return keepAlive; }
@JsonProperty("isActive")
public boolean isActive() { return active; }
@JsonProperty("isActive")
public void setActive(boolean active) { this.active = active; }
}
}

View File

@@ -0,0 +1,23 @@
package io.shinhanlife.axhub.biz.sm.mmg.presentation.io;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SmNmg0100M01SRequest {
private Integer menuId;
private Integer parentMenuId;
private String name;
private String path;
private String title;
private String icon;
private String isHide;
private String isHideTab;
private String link;
private String isIframe;
private String keepAlive;
private Integer orderSeq;
private String isActive;
}

View File

@@ -0,0 +1,15 @@
package io.shinhanlife.axhub.biz.sm.mmg.presentation.io;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SmNmg0100M01SResponse {
private Integer menuId;
}

View File

@@ -0,0 +1,12 @@
package io.shinhanlife.axhub.biz.sm.mmg.usecase;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmMmg0000M01RRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmMmg0000M01RResponse;
import java.util.List;
public interface SmMmg0000MUseCase {
public List<SmMmg0000M01RResponse> selectMenu(SmMmg0000M01RRequest req);
}

View File

@@ -0,0 +1,18 @@
package io.shinhanlife.axhub.biz.sm.mmg.usecase;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01DRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01RRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01RResponse;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01SRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01SResponse;
import java.util.List;
public interface SmNmg0100MUseCase {
List<SmNmg0100M01RResponse> selectMenu(SmNmg0100M01RRequest req);
SmNmg0100M01SResponse saveMenu(SmNmg0100M01SRequest req);
void deleteMenu(SmNmg0100M01DRequest req);
}

View File

@@ -0,0 +1,38 @@
package io.shinhanlife.axhub.biz.sm.mmg.usecase.impl;
import java.util.ArrayList;
import java.util.List;
import io.shinhanlife.axhub.biz.sm.mmg.converter.MenuConverter;
import io.shinhanlife.axhub.biz.sm.mmg.domain.service.impl.MenuService;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuInDto;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuListDto;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmMmg0000M01RRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmMmg0000M01RResponse;
import io.shinhanlife.axhub.biz.sm.mmg.usecase.SmMmg0000MUseCase;
import io.shinhanlife.glow.GlowServiceGroupId;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
@GlowServiceGroupId(value = "SmMmgc", description="SmMmg")
public class SmMmg0000MUseCaseImpl implements SmMmg0000MUseCase {
private final MenuService menuService;
private final MenuConverter converter;
@Override
public List<SmMmg0000M01RResponse> selectMenu(SmMmg0000M01RRequest req) {
List<SmMmg0000M01RResponse> result = new ArrayList<>();
MenuInDto dto = converter.smMmg0000M01RRequestToMenuInDto(req);
List<MenuListDto> menuListDtos = menuService.selectMenu(dto);
for (MenuListDto menuListDto : menuListDtos) {
result.add(converter.menuListDtoeToSmMmg0000M01RResponse(menuListDto));
}
return result;
}
}

View File

@@ -0,0 +1,93 @@
package io.shinhanlife.axhub.biz.sm.mmg.usecase.impl;
import io.shinhanlife.axhub.biz.sm.mmg.domain.service.impl.MenuService;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuInDto;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuListDto;
import io.shinhanlife.axhub.biz.sm.mmg.dto.MenuSaveInDto;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01DRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01RRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01RResponse;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01SRequest;
import io.shinhanlife.axhub.biz.sm.mmg.presentation.io.SmNmg0100M01SResponse;
import io.shinhanlife.axhub.biz.sm.mmg.usecase.SmNmg0100MUseCase;
import io.shinhanlife.glow.GlowServiceGroupId;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@GlowServiceGroupId(value = "SmNmgc", description = "SmNmg")
public class SmNmg0100MUseCaseImpl implements SmNmg0100MUseCase {
private final MenuService menuService;
@Override
public List<SmNmg0100M01RResponse> selectMenu(SmNmg0100M01RRequest req) {
MenuInDto inDto = new MenuInDto();
inDto.setIsActive(req.getIsActive());
inDto.setPath(req.getPath());
inDto.setTitle(req.getTitle());
List<MenuListDto> tree = menuService.selectMenu(inDto);
return tree.stream().map(this::toResponse).collect(Collectors.toList());
}
@Override
public SmNmg0100M01SResponse saveMenu(SmNmg0100M01SRequest req) {
MenuSaveInDto dto = new MenuSaveInDto();
dto.setMenuId(req.getMenuId());
dto.setParentMenuId(req.getParentMenuId());
dto.setName(req.getName());
dto.setPath(req.getPath());
dto.setTitle(req.getTitle());
dto.setIcon(req.getIcon());
dto.setIsHide(req.getIsHide());
dto.setIsHideTab(req.getIsHideTab());
dto.setLink(req.getLink());
dto.setIsIframe(req.getIsIframe());
dto.setKeepAlive(req.getKeepAlive());
dto.setOrderSeq(req.getOrderSeq());
dto.setIsActive(req.getIsActive());
Integer savedId = menuService.save(dto);
return SmNmg0100M01SResponse.builder().menuId(savedId).build();
}
@Override
public void deleteMenu(SmNmg0100M01DRequest req) {
menuService.delete(req.getMenuId());
}
private SmNmg0100M01RResponse toResponse(MenuListDto dto) {
MenuListDto.Meta m = dto.getMeta();
SmNmg0100M01RResponse.Meta meta = SmNmg0100M01RResponse.Meta.builder()
.title(m != null ? m.getTitle() : null)
.icon(m != null ? m.getIcon() : null)
.hide(m != null && m.isHide())
.hideTab(m != null && m.isHideTab())
.link(m != null ? m.getLink() : null)
.iframe(m != null && m.isIframe())
.keepAlive(m != null && m.isKeepAlive())
.orderSeq(m != null ? m.getOrderSeq() : 0)
.active(m != null && m.isActive())
.build();
List<SmNmg0100M01RResponse> children = (dto.getChildren() == null || dto.getChildren().isEmpty())
? Collections.emptyList()
: dto.getChildren().stream().map(this::toResponse).collect(Collectors.toList());
return SmNmg0100M01RResponse.builder()
.id(dto.getId())
.parentMenuId(dto.getParentMenuId())
.name(dto.getName())
.path(dto.getPath())
.meta(meta)
.children(children)
.build();
}
}

View File

@@ -0,0 +1,23 @@
package io.shinhanlife.axhub.biz.so.atm.converter;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrOutDto;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrSaveInDto;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrSearchInDto;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleListInDto;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.AthrSaveRequest;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.AthrSearchRequest;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.AthrSearchResponse;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.RoleListRequest;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public abstract class AccessMgmtConverter {
public abstract RoleListInDto toInDto(RoleListRequest request);
public abstract AthrSearchInDto toInDto(AthrSearchRequest request);
public abstract AthrSaveInDto toInDto(AthrSaveRequest request);
public abstract AthrSearchResponse toResponse(AthrOutDto outDto);
}

View File

@@ -0,0 +1,34 @@
package io.shinhanlife.axhub.biz.so.atm.domain.repository;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrItemOutDto;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrSearchInDto;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleKnwlAthrInDto;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleListInDto;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleListOutDto;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleToolAthrInDto;
import io.shinhanlife.glow.GlowMybatisMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@GlowMybatisMapper
public interface AccessMgmtMapper {
List<RoleListOutDto> selectRoles(RoleListInDto inDto);
List<AthrItemOutDto> selectAllTools();
List<AthrItemOutDto> selectAllKnwls();
List<String> selectGrantedToolIds(AthrSearchInDto inDto);
List<String> selectGrantedKnwlIds(AthrSearchInDto inDto);
void deleteToolAthr(@Param("systId") String systId, @Param("roleNo") String roleNo);
void insertToolAthr(RoleToolAthrInDto inDto);
void deleteKnwlAthr(@Param("systId") String systId, @Param("roleNo") String roleNo);
void insertKnwlAthr(RoleKnwlAthrInDto inDto);
}

View File

@@ -0,0 +1,18 @@
package io.shinhanlife.axhub.biz.so.atm.domain.service;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrOutDto;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrSaveInDto;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrSearchInDto;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleListInDto;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleListOutDto;
import java.util.List;
public interface AccessMgmtService {
List<RoleListOutDto> getRoles(RoleListInDto inDto);
AthrOutDto getAthr(AthrSearchInDto inDto);
void saveAthr(AthrSaveInDto inDto);
}

View File

@@ -0,0 +1,128 @@
package io.shinhanlife.axhub.biz.so.atm.domain.service.impl;
import io.shinhanlife.axhub.biz.so.atm.domain.repository.AccessMgmtMapper;
import io.shinhanlife.axhub.biz.so.atm.domain.service.AccessMgmtService;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrItemOutDto;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrOutDto;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrSaveInDto;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrSearchInDto;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleKnwlAthrInDto;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleListInDto;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleListOutDto;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleToolAthrInDto;
import io.shinhanlife.axhub.common.util.SessionUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class AccessMgmtServiceImpl implements AccessMgmtService {
private final AccessMgmtMapper accessMgmtMapper;
private static final String SYSTEM_CD = "AXH";
private static final String SYSTEM_PRG = "SOATM0100";
@Override
public List<RoleListOutDto> getRoles(RoleListInDto inDto) {
return accessMgmtMapper.selectRoles(inDto);
}
@Override
public AthrOutDto getAthr(AthrSearchInDto inDto) {
Set<String> grantedToolIds = accessMgmtMapper.selectGrantedToolIds(inDto)
.stream().collect(Collectors.toSet());
Set<String> grantedKnwlIds = accessMgmtMapper.selectGrantedKnwlIds(inDto)
.stream().collect(Collectors.toSet());
List<AthrItemOutDto> tools = accessMgmtMapper.selectAllTools()
.stream()
.peek(item -> item.setGranted(grantedToolIds.contains(item.getResourceId())))
.collect(Collectors.toList());
List<AthrItemOutDto> knwls = accessMgmtMapper.selectAllKnwls()
.stream()
.peek(item -> item.setGranted(grantedKnwlIds.contains(item.getResourceId())))
.collect(Collectors.toList());
return new AthrOutDto(tools, knwls);
}
@Override
@Transactional
public void saveAthr(AthrSaveInDto inDto) {
Date now = new Date();
String systId = inDto.getSystId();
String roleNo = inDto.getRoleNo();
accessMgmtMapper.deleteToolAthr(systId, roleNo);
if (inDto.getGrantedToolIds() != null) {
for (String toolId : inDto.getGrantedToolIds()) {
accessMgmtMapper.insertToolAthr(buildToolAthrInDto(systId, roleNo, toolId, now));
}
}
accessMgmtMapper.deleteKnwlAthr(systId, roleNo);
if (inDto.getGrantedKnwlIds() != null) {
for (String knwlId : inDto.getGrantedKnwlIds()) {
accessMgmtMapper.insertKnwlAthr(buildKnwlAthrInDto(systId, roleNo, knwlId, now));
}
}
}
private RoleToolAthrInDto buildToolAthrInDto(String systId, String roleNo, String toolId, Date now) {
RoleToolAthrInDto dto = new RoleToolAthrInDto();
dto.setRoleToolAthrId("RTA-" + shortUuid());
dto.setSystId(systId);
dto.setRoleNo(roleNo);
dto.setToolId(toolId);
dto.setPuseYn("Y");
fillAudit(dto, now);
return dto;
}
private RoleKnwlAthrInDto buildKnwlAthrInDto(String systId, String roleNo, String knwlId, Date now) {
RoleKnwlAthrInDto dto = new RoleKnwlAthrInDto();
dto.setRoleKnwlAthrId("RKA-" + shortUuid());
dto.setSystId(systId);
dto.setRoleNo(roleNo);
dto.setKnwlId(knwlId);
dto.setPuseYn("Y");
fillAudit(dto, now);
return dto;
}
private void fillAudit(RoleToolAthrInDto dto, Date now) {
String prafNo = SessionUtil.getPrafNo();
String ognzNo = SessionUtil.getOgnzNo();
dto.setSystRgiDt(now); dto.setSystRgiPrafNo(prafNo);
dto.setSystRgiOgnzNo(ognzNo); dto.setSystRgiSystCd(SYSTEM_CD);
dto.setSystRgiPrgrId(SYSTEM_PRG);
dto.setSystChgDt(now); dto.setSystChgPrafNo(prafNo);
dto.setSystChgOgnzNo(ognzNo); dto.setSystChgSystCd(SYSTEM_CD);
dto.setSystChgPrgrId(SYSTEM_PRG);
}
private void fillAudit(RoleKnwlAthrInDto dto, Date now) {
String prafNo = SessionUtil.getPrafNo();
String ognzNo = SessionUtil.getOgnzNo();
dto.setSystRgiDt(now); dto.setSystRgiPrafNo(prafNo);
dto.setSystRgiOgnzNo(ognzNo); dto.setSystRgiSystCd(SYSTEM_CD);
dto.setSystRgiPrgrId(SYSTEM_PRG);
dto.setSystChgDt(now); dto.setSystChgPrafNo(prafNo);
dto.setSystChgOgnzNo(ognzNo); dto.setSystChgSystCd(SYSTEM_CD);
dto.setSystChgPrgrId(SYSTEM_PRG);
}
private String shortUuid() {
return UUID.randomUUID().toString().replace("-", "").substring(0, 12).toUpperCase();
}
}

View File

@@ -0,0 +1,14 @@
package io.shinhanlife.axhub.biz.so.atm.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class AthrItemOutDto {
private String resourceId;
private String resourceNm;
private String resourceDs;
private String typeCode;
private boolean granted;
}

View File

@@ -0,0 +1,13 @@
package io.shinhanlife.axhub.biz.so.atm.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.List;
@Getter
@AllArgsConstructor
public class AthrOutDto {
private List<AthrItemOutDto> tools;
private List<AthrItemOutDto> knwls;
}

View File

@@ -0,0 +1,15 @@
package io.shinhanlife.axhub.biz.so.atm.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class AthrSaveInDto {
private String systId;
private String roleNo;
private List<String> grantedToolIds;
private List<String> grantedKnwlIds;
}

View File

@@ -0,0 +1,11 @@
package io.shinhanlife.axhub.biz.so.atm.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class AthrSearchInDto {
private String systId;
private String roleNo;
}

View File

@@ -0,0 +1,27 @@
package io.shinhanlife.axhub.biz.so.atm.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class RoleKnwlAthrInDto {
private String roleKnwlAthrId;
private String systId;
private String roleNo;
private String knwlId;
private String puseYn;
private Date systRgiDt;
private String systRgiPrafNo;
private String systRgiOgnzNo;
private String systRgiSystCd;
private String systRgiPrgrId;
private Date systChgDt;
private String systChgPrafNo;
private String systChgOgnzNo;
private String systChgSystCd;
private String systChgPrgrId;
}

View File

@@ -0,0 +1,12 @@
package io.shinhanlife.axhub.biz.so.atm.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class RoleListInDto {
private String systId;
private String puseYn;
private String keyword;
}

View File

@@ -0,0 +1,14 @@
package io.shinhanlife.axhub.biz.so.atm.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class RoleListOutDto {
private String systId;
private String roleNo;
private String roleNm;
private String roleDs;
private String puseYn;
}

View File

@@ -0,0 +1,27 @@
package io.shinhanlife.axhub.biz.so.atm.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class RoleToolAthrInDto {
private String roleToolAthrId;
private String systId;
private String roleNo;
private String toolId;
private String puseYn;
private Date systRgiDt;
private String systRgiPrafNo;
private String systRgiOgnzNo;
private String systRgiSystCd;
private String systRgiPrgrId;
private Date systChgDt;
private String systChgPrafNo;
private String systChgOgnzNo;
private String systChgSystCd;
private String systChgPrgrId;
}

View File

@@ -0,0 +1,45 @@
package io.shinhanlife.axhub.biz.so.atm.presentation;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleListOutDto;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.AthrSaveRequest;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.AthrSearchRequest;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.AthrSearchResponse;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.RoleListRequest;
import io.shinhanlife.axhub.biz.so.atm.usecase.AccessMgmtUseCase;
import io.shinhanlife.glow.BaseResponse;
import io.shinhanlife.glow.ResponseUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
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 java.util.List;
@RestController
@RequestMapping("/so/atm")
@RequiredArgsConstructor
public class SOATM0100Controller {
private final AccessMgmtUseCase accessMgmtUseCase;
@PostMapping("/SOATM0100R")
public ResponseEntity<BaseResponse<List<RoleListOutDto>>> getRoles(
@RequestBody RoleListRequest request) {
return ResponseUtil.ok(accessMgmtUseCase.getRoles(request));
}
@PostMapping("/SOATM0101R")
public ResponseEntity<BaseResponse<AthrSearchResponse>> getAthr(
@RequestBody AthrSearchRequest request) {
return ResponseUtil.ok(accessMgmtUseCase.getAthr(request));
}
@PostMapping("/SOATM0100U")
public ResponseEntity<BaseResponse<Void>> saveAthr(
@RequestBody AthrSaveRequest request) {
accessMgmtUseCase.saveAthr(request);
return ResponseUtil.ok();
}
}

View File

@@ -0,0 +1,15 @@
package io.shinhanlife.axhub.biz.so.atm.presentation.io;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class AthrSaveRequest {
private String systId;
private String roleNo;
private List<String> grantedToolIds;
private List<String> grantedKnwlIds;
}

View File

@@ -0,0 +1,11 @@
package io.shinhanlife.axhub.biz.so.atm.presentation.io;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class AthrSearchRequest {
private String systId;
private String roleNo;
}

View File

@@ -0,0 +1,14 @@
package io.shinhanlife.axhub.biz.so.atm.presentation.io;
import io.shinhanlife.axhub.biz.so.atm.dto.AthrItemOutDto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.List;
@Getter
@AllArgsConstructor
public class AthrSearchResponse {
private List<AthrItemOutDto> tools;
private List<AthrItemOutDto> knwls;
}

View File

@@ -0,0 +1,12 @@
package io.shinhanlife.axhub.biz.so.atm.presentation.io;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class RoleListRequest {
private String systId;
private String puseYn;
private String keyword;
}

View File

@@ -0,0 +1,18 @@
package io.shinhanlife.axhub.biz.so.atm.usecase;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleListOutDto;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.AthrSaveRequest;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.AthrSearchRequest;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.AthrSearchResponse;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.RoleListRequest;
import java.util.List;
public interface AccessMgmtUseCase {
List<RoleListOutDto> getRoles(RoleListRequest request);
AthrSearchResponse getAthr(AthrSearchRequest request);
void saveAthr(AthrSaveRequest request);
}

View File

@@ -0,0 +1,37 @@
package io.shinhanlife.axhub.biz.so.atm.usecase.impl;
import io.shinhanlife.axhub.biz.so.atm.converter.AccessMgmtConverter;
import io.shinhanlife.axhub.biz.so.atm.domain.service.AccessMgmtService;
import io.shinhanlife.axhub.biz.so.atm.dto.RoleListOutDto;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.AthrSaveRequest;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.AthrSearchRequest;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.AthrSearchResponse;
import io.shinhanlife.axhub.biz.so.atm.presentation.io.RoleListRequest;
import io.shinhanlife.axhub.biz.so.atm.usecase.AccessMgmtUseCase;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class AccessMgmtUseCaseImpl implements AccessMgmtUseCase {
private final AccessMgmtService accessMgmtService;
private final AccessMgmtConverter converter;
@Override
public List<RoleListOutDto> getRoles(RoleListRequest request) {
return accessMgmtService.getRoles(converter.toInDto(request));
}
@Override
public AthrSearchResponse getAthr(AthrSearchRequest request) {
return converter.toResponse(accessMgmtService.getAthr(converter.toInDto(request)));
}
@Override
public void saveAthr(AthrSaveRequest request) {
accessMgmtService.saveAthr(converter.toInDto(request));
}
}

View File

@@ -0,0 +1,19 @@
package io.shinhanlife.axhub.common.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 모든 엔드포인트에 대해 CORS 허용
.allowedOrigins("http://localhost:3006") // Vue 앱의 오리진 허용 (필요 시 여러 오리진 추가: .allowedOrigins("http://localhost:3006", "https://example.com"))
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 허용할 HTTP 메서드
.allowedHeaders("*") // 모든 헤더 허용
.allowCredentials(true) // 쿠키/인증 정보 허용 (필요 시)
.maxAge(3600); // preflight 요청 캐시 시간 (초 단위)
}
}

View File

@@ -0,0 +1,40 @@
package io.shinhanlife.axhub.common.config;
import com.p6spy.engine.logging.Category;
import com.p6spy.engine.spy.appender.MessageFormattingStrategy;
public class P6SpySqlFormatter implements MessageFormattingStrategy {
@Override
public String formatMessage(int connectionId, String now, long elapsed,
String category, String prepared, String sql, String url) {
if (sql == null || sql.isBlank()) return "";
if (Category.STATEMENT.getName().equals(category)) {
String prettySQL = sql
.replaceAll("(?i)\\bSELECT\\b", "\nSELECT")
.replaceAll("(?i)\\bFROM\\b", "\n FROM")
.replaceAll("(?i)\\bWHERE\\b", "\n WHERE")
.replaceAll("(?i)\\bAND\\b", "\n AND")
.replaceAll("(?i)\\bOR\\b", "\n OR")
.replaceAll("(?i)\\bINNER JOIN\\b", "\n INNER JOIN")
.replaceAll("(?i)\\bLEFT JOIN\\b", "\n LEFT JOIN")
.replaceAll("(?i)\\bORDER BY\\b", "\n ORDER BY")
.replaceAll("(?i)\\bGROUP BY\\b", "\n GROUP BY")
.replaceAll("(?i)\\bINSERT INTO\\b", "\nINSERT INTO")
.replaceAll("(?i)\\bVALUES\\b", "\n VALUES")
.replaceAll("(?i)\\bUPDATE\\b", "\nUPDATE")
.replaceAll("(?i)\\bSET\\b", "\n SET")
.replaceAll("(?i)\\bDELETE FROM\\b", "\nDELETE FROM");
return String.format("""
\n┌─────────────────────────────────────────
│ SQL [%dms]
│%s
└─────────────────────────────────────────
""", elapsed, prettySQL.indent(2).stripTrailing());
}
return "";
}
}

View File

@@ -0,0 +1,15 @@
package io.shinhanlife.axhub.common.session.converter;
import io.shinhanlife.axhub.common.session.dto.SessionDto;
import io.shinhanlife.axhub.common.session.dto.ZtUsacOutDto;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@Mapper(componentModel = "spring")
public abstract class ZtUsacConverter {
@Mapping(target = "loginDtm", ignore = true)
@Mapping(target = "isManager", ignore = true)
public abstract SessionDto toSessionDto(ZtUsacOutDto dto);
}

View File

@@ -0,0 +1,37 @@
package io.shinhanlife.axhub.common.session.domain.model;
import io.shinhanlife.glow.db.dto.AuditInfo;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class ZtUsacModel extends AuditInfo {
/* 인사번호 */
private String prafNo;
/* 인사명 */
private String prafNm;
/* 조직번호 */
private String ognzNo;
/* 이메일주소 */
private String addre;
/* 인사직무코드 */
private String prafOfduCd;
/* 인사직무명 */
private String prafOfduNm;
/* 인사직급코드 */
private String prafOfleCd;
/* 인사직급명 */
private String prafOfleNm;
/* 인사직책코드 */
private String prafDutyCd;
/* 인사직책명 */
private String prafDutyNm;
}

View File

@@ -0,0 +1,19 @@
package io.shinhanlife.axhub.common.session.domain.repository;
import io.shinhanlife.glow.GlowMybatisMapper;
import io.shinhanlife.axhub.common.session.dto.ZtUsacInDto;
import io.shinhanlife.axhub.common.session.dto.ZtUsacOutDto;
@GlowMybatisMapper
public interface ZtUsacRepository {
/**
* 사용자 조회 (단건)
*
* @param dto 사번
* @return 인사정보
*/
ZtUsacOutDto selectZtUsac(ZtUsacInDto dto);
}

View File

@@ -0,0 +1,15 @@
package io.shinhanlife.axhub.common.session.domain.service;
import io.shinhanlife.axhub.common.session.dto.ZtUsacInDto;
import io.shinhanlife.axhub.common.session.dto.ZtUsacOutDto;
public interface ZtUsacService {
/**
* 사용자 조회 (단건)
*
* @param dto 사번
* @return 인사정보
*/
ZtUsacOutDto selectZtUsac(ZtUsacInDto dto);
}

View File

@@ -0,0 +1,28 @@
package io.shinhanlife.axhub.common.session.domain.service.impl;
import io.shinhanlife.axhub.common.session.domain.repository.ZtUsacRepository;
import io.shinhanlife.axhub.common.session.domain.service.ZtUsacService;
import io.shinhanlife.axhub.common.session.dto.ZtUsacInDto;
import io.shinhanlife.axhub.common.session.dto.ZtUsacOutDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class ZtUsacServiceImpl implements ZtUsacService {
private final ZtUsacRepository ztUsacRepository;
/**
* 사용자 조회 (단건)
*
* @param dto 사번
* @return 인사정보
*/
@Override
public ZtUsacOutDto selectZtUsac(ZtUsacInDto dto) {
ZtUsacOutDto result = ztUsacRepository.selectZtUsac(dto);
result.initLists();
return result;
}
}

View File

@@ -0,0 +1,62 @@
package io.shinhanlife.axhub.common.session.dto;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
@AllArgsConstructor
public class SessionDto {
/* 인사번호 */
private String prafNo;
/* 인사명 */
private String prafNm;
/* 조직번호 */
private String ognzNo;
/* 조직번호 */
private String ognzNm;
/* 이메일주소 */
private String addre;
/* 인사직무코드 */
private String prafOfduCd;
/* 인사직무명 */
private String prafOfduNm;
/* 인사직급코드 */
private String prafOfleCd;
/* 인사직급명 */
private String prafOfleNm;
/* 인사직책코드 */
private String prafDutyCd;
/* 인사직책명 */
private String prafDutyNm;
private List<String> roleNoList;
private List<String> roleNmList;
private List<String> tgtrPrafNoList;
private List<String> tgtrOgnzNoList;
// 유틸성
private String loginDtm; // 로그인일시
private String isManager; // 관리자여부
public void setLoginDtm() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
this.loginDtm = LocalDateTime.now().format(formatter);
}
public void setIsManager(String isManager) {
// TODO 역할 필터링 후 관리자 여부 체크
this.isManager = "Y";
}
}

View File

@@ -0,0 +1,24 @@
package io.shinhanlife.axhub.common.session.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
@AllArgsConstructor
public class ZtUsacInDto {
public ZtUsacInDto() {
setPuseYn("Y");
}
/* 인사번호 */
private String prafNo;
/* 사용여부 */
private String puseYn;
}

View File

@@ -0,0 +1,68 @@
package io.shinhanlife.axhub.common.session.dto;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class ZtUsacOutDto {
/* 인사번호 */
private String prafNo;
/* 인사명 */
private String prafNm;
/* 조직번호 */
private String ognzNo;
/* 조직명 */
private String ognzNm;
/* 이메일주소 */
// @GlowSecureField(type = DataSecureType.DECRYPT_DB, direction = SafeDBType.COMM) TODO 방화벽 뚫리면 확인
private String addre;
/* 인사직무코드 */
private String prafOfduCd;
/* 인사직무명 */
private String prafOfduNm;
/* 인사직급코드 */
private String prafOfleCd;
/* 인사직급명 */
private String prafOfleNm;
/* 인사직책코드 */
private String prafDutyCd;
/* 인사직책명 */
private String prafDutyNm;
/* 사용여부 */
private String puseYn;
private String roleNoStrList;
private String roleNmStrList;
private String tgtrPrafNoStrList;
private String tgtrOgnzNoStrList;
private List<String> roleNoList;
private List<String> roleNmList;
private List<String> tgtrPrafNoList;
private List<String> tgtrOgnzNoList;
public void initLists() {
this.roleNoList = convertStrToList(roleNoStrList);
this.roleNmList = convertStrToList(roleNmStrList);
this.tgtrPrafNoList = convertStrToList(tgtrPrafNoStrList);
this.tgtrOgnzNoList = convertStrToList(tgtrOgnzNoStrList);
}
private List<String> convertStrToList(String str) {
if (str == null || str.isEmpty()) {
return new ArrayList<>();
}
return Arrays.asList(str.split(","));
}
}

View File

@@ -0,0 +1,77 @@
package io.shinhanlife.axhub.common.session.presentation;
import io.micrometer.common.util.StringUtils;
import io.shinhanlife.glow.BaseResponse;
import io.shinhanlife.glow.BizException;
import io.shinhanlife.glow.GlowControllerId;
import io.shinhanlife.glow.ResponseUtil;
import io.shinhanlife.axhub.common.session.converter.ZtUsacConverter;
import io.shinhanlife.axhub.common.session.domain.service.ZtUsacService;
import io.shinhanlife.axhub.common.session.dto.SessionDto;
import io.shinhanlife.axhub.common.session.dto.ZtUsacInDto;
import io.shinhanlife.axhub.common.session.dto.ZtUsacOutDto;
import io.shinhanlife.axhub.common.session.presentation.io.SsoResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.javassist.NotFoundException;
import org.springframework.http.ResponseEntity;
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 java.util.Objects;
@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/sso")
public class SsoRestController {
private static final String NLS_LOGIN_URL = "";
private final ZtUsacService ztUsacService;
private final ZtUsacConverter ztUsacConverter;
/**
* sso 연동 전 임시 로그인
*
* @param request
* @param response
* @param session
* @param <T>
* @return
*/
@GlowControllerId("tempLogin")
@PostMapping("/tempLogin")
public <T> ResponseEntity<BaseResponse<SsoResponse>> tempLogin(HttpServletRequest request, HttpServletResponse response,
HttpSession session, @RequestBody SessionDto requestDto) {
try {
if (StringUtils.isEmpty(requestDto.getPrafNo())) {
throw new NotFoundException("SSO >> not found sso id");
}
// DB 유저 가져오기
ZtUsacOutDto ztUsacOutDto = ztUsacService.selectZtUsac(ZtUsacInDto.builder().prafNo(requestDto.getPrafNo()).puseYn("Y")
.build());
if (Objects.isNull(ztUsacOutDto) || StringUtils.isEmpty(ztUsacOutDto.getPrafNo())) {
throw new BizException("SSO >> not found UserInfo >> retCode:");
}
SessionDto sessionDto = ztUsacConverter.toSessionDto(ztUsacOutDto);
sessionDto.setLoginDtm(); // 로그인 시점 세팅
session.setAttribute("userInfo", sessionDto);
return ResponseUtil.ok(SsoResponse.builder().retCode("0").userInfo(sessionDto).build());
} catch (Exception e) {
log.error("로그인 실패", e);
session.invalidate();
}
return ResponseUtil.ok(SsoResponse.builder().redirectUrl(NLS_LOGIN_URL).build());
}
}

View File

@@ -0,0 +1,21 @@
package io.shinhanlife.axhub.common.session.presentation.io;
import io.shinhanlife.axhub.common.session.dto.SessionDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SsoResponse {
private String retCode;
private SessionDto userInfo;
private String redirectUrl;
}

View File

@@ -0,0 +1,31 @@
package io.shinhanlife.axhub.common.util;
import io.shinhanlife.axhub.common.session.dto.SessionDto;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
public class SessionUtil {
private static final String SESSION_KEY = "userInfo";
private SessionUtil() {}
public static SessionDto getSession() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes == null) return null;
HttpSession session = attributes.getRequest().getSession(false);
if (session == null) return null;
return (SessionDto) session.getAttribute(SESSION_KEY);
}
public static String getPrafNo() {
SessionDto session = getSession();
return session != null ? session.getPrafNo() : null;
}
public static String getOgnzNo() {
SessionDto session = getSession();
return session != null ? session.getOgnzNo() : null;
}
}

View File

@@ -0,0 +1,23 @@
package io.shinhanlife.axhub.sample.converter;
import io.shinhanlife.axhub.sample.domain.model.AppliSystNtfyPatiModel;
import io.shinhanlife.axhub.sample.dto.AppliSystNtfyRgiInDTO;
import io.shinhanlife.axhub.sample.dto.StrnTermListInDTO;
import io.shinhanlife.axhub.sample.dto.StrnTermListOutDTO;
import io.shinhanlife.axhub.sample.presentation.io.AppliSystNtfyPatiRequest;
import io.shinhanlife.axhub.sample.presentation.io.StrnTermRequest;
import io.shinhanlife.axhub.sample.presentation.io.StrnTermResponse;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public abstract class SampleConverter {
public abstract StrnTermListInDTO convertRequestToDto(StrnTermRequest req);
public abstract StrnTermResponse convertDtoToResponse(StrnTermListOutDTO outDto);
public abstract AppliSystNtfyPatiModel convertDtoToModel(AppliSystNtfyRgiInDTO inDto);
public abstract AppliSystNtfyRgiInDTO convertAppliRequestToDto(AppliSystNtfyPatiRequest request);
}

View File

@@ -0,0 +1,21 @@
package io.shinhanlife.axhub.sample.domain.model;
import io.shinhanlife.glow.db.dto.AuditInfo;
import lombok.*;
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class AppliSystNtfyPatiModel extends AuditInfo {
private String appliSystNtfyPatiId;
private String appliSystNtfyKdCd;
private String appliDutjCd;
private String appliDutjPrjcCd;
private String ntfyMsgCt;
private String ntfyOccDt;
private String ntfyCfmDt;
private String ntfyTrgtPrafNo;
private String shmsPmlYn;
private String ntfyCfmYn;
}

View File

@@ -0,0 +1,20 @@
package io.shinhanlife.axhub.sample.domain.repository;
import io.shinhanlife.axhub.sample.domain.model.AppliSystNtfyPatiModel;
import io.shinhanlife.axhub.sample.dto.StrnTermListInDTO;
import io.shinhanlife.axhub.sample.dto.StrnTermListOutDTO;
import io.shinhanlife.glow.GlowIndexPaging;
import io.shinhanlife.glow.GlowMybatisMapper;
import io.shinhanlife.glow.PageInfo;
import java.util.List;
@GlowMybatisMapper
public interface GlowSampleRepository {
@GlowIndexPaging
List<StrnTermListOutDTO.StrnTerm> selectStrnTerm(StrnTermListInDTO inDto, PageInfo pageInfo);
int insertAppliSystNtfyPati(AppliSystNtfyPatiModel appliSystNtfyPatiModel);
}

View File

@@ -0,0 +1,11 @@
package io.shinhanlife.axhub.sample.domain.service;
import io.shinhanlife.axhub.sample.dto.AppliSystNtfyRgiInDTO;
import io.shinhanlife.axhub.sample.dto.StrnTermListInDTO;
import io.shinhanlife.axhub.sample.dto.StrnTermListOutDTO;
import io.shinhanlife.glow.PageInfo;
public interface GlowSampleService {
StrnTermListOutDTO getStrnTerms(StrnTermListInDTO inDto, PageInfo pageInfo);
int insertAppliSystNtfyPati(AppliSystNtfyRgiInDTO inDto);
}

View File

@@ -0,0 +1,41 @@
package io.shinhanlife.axhub.sample.domain.service.impl;
import io.shinhanlife.axhub.sample.converter.SampleConverter;
import io.shinhanlife.axhub.sample.domain.model.AppliSystNtfyPatiModel;
import io.shinhanlife.axhub.sample.domain.repository.GlowSampleRepository;
import io.shinhanlife.axhub.sample.domain.service.GlowSampleService;
import io.shinhanlife.axhub.sample.dto.AppliSystNtfyRgiInDTO;
import io.shinhanlife.axhub.sample.dto.StrnTermListInDTO;
import io.shinhanlife.axhub.sample.dto.StrnTermListOutDTO;
import io.shinhanlife.glow.GlowLogger;
import io.shinhanlife.glow.GlowLogTarget;
import io.shinhanlife.glow.PageInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class GlowSampleServiceImpl implements GlowSampleService {
@GlowLogTarget(GlowLogTarget.Target.FILE)
private final GlowLogger log;
private final GlowSampleRepository glowSampleRepository;
private final SampleConverter sampleConverter;
@Override
public StrnTermListOutDTO getStrnTerms(StrnTermListInDTO inDto, PageInfo pageInfo) {
List<StrnTermListOutDTO.StrnTerm> out = glowSampleRepository.selectStrnTerm(inDto, pageInfo);
return StrnTermListOutDTO.builder()
.strnTerms(out)
.pageInfo(pageInfo)
.build();
}
@Override
public int insertAppliSystNtfyPati(AppliSystNtfyRgiInDTO inDto) {
AppliSystNtfyPatiModel appliSystNtfyPatiModel = sampleConverter.convertDtoToModel(inDto);
return glowSampleRepository.insertAppliSystNtfyPati(appliSystNtfyPatiModel);
}
}

View File

@@ -0,0 +1,21 @@
package io.shinhanlife.axhub.sample.dto;
import lombok.*;
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AppliSystNtfyRgiInDTO {
private String appliSystNtfyPatiId;
private String appliSystNtfyKdCd;
private String appliDutjCd;
private String appliDutjPrjcCd;
private String ntfyMsgCt;
private String ntfyOccDt;
private String ntfyCfmDt;
private String ntfyTrgtPrafNo;
private String shmsPmlYn;
private String ntfyCfmYn;
}

View File

@@ -0,0 +1,12 @@
package io.shinhanlife.axhub.sample.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class StrnTermListInDTO {
private String strnTermHanNm;
}

View File

@@ -0,0 +1,27 @@
package io.shinhanlife.axhub.sample.dto;
import io.shinhanlife.glow.PageInfo;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Builder
@Getter
@Setter
public class StrnTermListOutDTO {
private List<StrnTerm> strnTerms;
private PageInfo pageInfo;
@Builder
@Getter
@Setter
public static class StrnTerm{
private String strnTermHanNm;
private String strnTermEngcAbrNm;
private String strnTermEngNm;
private String strnTermScrnTermNm;
}
}

View File

@@ -0,0 +1,40 @@
package io.shinhanlife.axhub.sample.presentation;
import io.shinhanlife.glow.BaseResponse;
import io.shinhanlife.glow.GlowControllerId;
import io.shinhanlife.glow.GlowLogTarget;
import io.shinhanlife.glow.GlowLogger;
import io.shinhanlife.glow.ResponseUtil;
import io.shinhanlife.axhub.sample.presentation.io.AppliSystNtfyPatiRequest;
import io.shinhanlife.axhub.sample.presentation.io.AppliSystNtfyPatiResponse;
import io.shinhanlife.axhub.sample.presentation.io.StrnTermRequest;
import io.shinhanlife.axhub.sample.presentation.io.StrnTermResponse;
import io.shinhanlife.axhub.sample.usecase.GlowSampleUseCase;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
public class GlowSampleController {
@GlowLogTarget({GlowLogTarget.Target.CONSOLE, GlowLogTarget.Target.FILE})
private final GlowLogger log;
private final GlowSampleUseCase glowSampleUseCase;
@GlowControllerId(value = "selectStrnTerm")
@PostMapping("/selectStrnTerm")
public ResponseEntity<BaseResponse<StrnTermResponse>> getStrnTerms(@RequestBody StrnTermRequest request) {
return ResponseUtil.ok(glowSampleUseCase.getStrnTerms(request));
}
@GlowControllerId(value = "insertAp")
@PostMapping("/insertAppliSystNtfyPati")
public ResponseEntity<BaseResponse<AppliSystNtfyPatiResponse>> insertAppliSystNtfyPati(@RequestBody AppliSystNtfyPatiRequest request) {
return ResponseUtil.ok(glowSampleUseCase.insertAppliSystNtfyPati(request));
}
}

View File

@@ -0,0 +1,20 @@
package io.shinhanlife.axhub.sample.presentation.io;
import lombok.*;
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class AppliSystNtfyPatiRequest {
private String appliSystNtfyPatiId;
private String appliSystNtfyKdCd;
private String appliDutjCd;
private String appliDutjPrjcCd;
private String ntfyMsgCt;
private String ntfyOccDt;
private String ntfyCfmDt;
private String ntfyTrgtPrafNo;
private String shmsPmlYn;
private String ntfyCfmYn;
}

View File

@@ -0,0 +1,12 @@
package io.shinhanlife.axhub.sample.presentation.io;
import lombok.*;
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class AppliSystNtfyPatiResponse {
private String successYn;
private String msg;
}

View File

@@ -0,0 +1,14 @@
package io.shinhanlife.axhub.sample.presentation.io;
import io.shinhanlife.glow.PageInfo;
import lombok.*;
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class StrnTermRequest {
private PageInfo pageInfo;
private String strnTermHanNm;
}

View File

@@ -0,0 +1,27 @@
package io.shinhanlife.axhub.sample.presentation.io;
import io.shinhanlife.glow.PageInfo;
import lombok.*;
import java.util.List;
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class StrnTermResponse {
private List<StrnTerm> strnTerms;
private PageInfo pageInfo;
@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class StrnTerm{
private String strnTermHanNm;
private String strnTermEngcAbrNm;
private String strnTermEngNm;
private String strnTermScrnTermNm;
}
}

View File

@@ -0,0 +1,11 @@
package io.shinhanlife.axhub.sample.usecase;
import io.shinhanlife.axhub.sample.presentation.io.AppliSystNtfyPatiRequest;
import io.shinhanlife.axhub.sample.presentation.io.AppliSystNtfyPatiResponse;
import io.shinhanlife.axhub.sample.presentation.io.StrnTermRequest;
import io.shinhanlife.axhub.sample.presentation.io.StrnTermResponse;
public interface GlowSampleUseCase {
StrnTermResponse getStrnTerms(StrnTermRequest req);
AppliSystNtfyPatiResponse insertAppliSystNtfyPati(AppliSystNtfyPatiRequest req);
}

View File

@@ -0,0 +1,43 @@
package io.shinhanlife.axhub.sample.usecase.impl;
import io.shinhanlife.axhub.sample.converter.SampleConverter;
import io.shinhanlife.axhub.sample.domain.service.GlowSampleService;
import io.shinhanlife.axhub.sample.dto.StrnTermListOutDTO;
import io.shinhanlife.axhub.sample.presentation.io.AppliSystNtfyPatiRequest;
import io.shinhanlife.axhub.sample.presentation.io.AppliSystNtfyPatiResponse;
import io.shinhanlife.axhub.sample.presentation.io.StrnTermRequest;
import io.shinhanlife.axhub.sample.presentation.io.StrnTermResponse;
import io.shinhanlife.axhub.sample.usecase.GlowSampleUseCase;
import io.shinhanlife.glow.GlowAppServiceId;
import io.shinhanlife.glow.GlowLogTarget;
import io.shinhanlife.glow.GlowLogger;
import io.shinhanlife.glow.GlowServiceGroupId;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
@GlowServiceGroupId(value = "GlowSample", description="GlowSampleUseCase")
public class GlowSampleUseCaseImpl implements GlowSampleUseCase {
@GlowLogTarget(GlowLogTarget.Target.FILE)
private final GlowLogger log;
private final GlowSampleService glowSampleService;
private final SampleConverter converter;
@GlowAppServiceId(value = "SAMPLE-DB-0001", description = "표준용어조회(DB)")
public StrnTermResponse getStrnTerms(StrnTermRequest req) {
StrnTermListOutDTO outDto = glowSampleService.getStrnTerms(converter.convertRequestToDto(req), req.getPageInfo());
return converter.convertDtoToResponse(outDto);
}
@GlowAppServiceId(value = "SAMPLE-DB-0002", description = "어플리케이션시스템알림내역등록")
public AppliSystNtfyPatiResponse insertAppliSystNtfyPati(AppliSystNtfyPatiRequest req) {
int rtn = glowSampleService.insertAppliSystNtfyPati(converter.convertAppliRequestToDto(req));
return AppliSystNtfyPatiResponse.builder()
.successYn(rtn > 0 ? "Y" : "N")
.msg(rtn > 0 ? "성공적으로 처리 되었습니다." : "처리중 오류발생!!")
.build();
}
}

View File

@@ -0,0 +1,29 @@
package io.shinhanlife.glow;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
//@Schema(description = "응답 에러 객체. 성공 케이스일 경우 null. 실제 에러가 발생할 경우에만 예외명, 예외 메시지 필드 세팅 예정.")
public class BaseException {
// @Schema(description = "Error 코드 Meta 참조 운영. (예) 20001, 50001 등", shinhanlife = "20001")
String code;
// @Schema(description = "메시지")
String message;
// @Schema(description = "예외명.", shinhanlife = "NullPointerException")
@Builder.Default
String exceptionName = "";
// @Schema(description = "예외상세", shinhanlife = "StackTrace")
@Builder.Default
String exceptionDetail = "";
}

View File

@@ -0,0 +1,25 @@
package io.shinhanlife.glow;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
@ToString
@Getter
@Builder
@AllArgsConstructor
public class BaseResponse<T> {
// @Schema(description = "응답 코드 HTTP STATUS 오류 - 실제 Header 는 200 으로 내려감", shinhanlife = "200")
private int code;
// @Schema(description = "응답 메시지. 응답 코드와 매핑된 메시지.", shinhanlife = "데이터 생성 성공")
private String message;
// @Schema(description = "응답 본문 데이터. 실제 비즈니스 데이터.")
private T data;
private BaseException error;
}

View File

@@ -0,0 +1,6 @@
package io.shinhanlife.glow;
public class BizException extends RuntimeException {
public BizException(String s) {
}
}

View File

@@ -0,0 +1,13 @@
package io.shinhanlife.glow;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface GlowAppServiceId {
String value();
String description() default "";
}

View File

@@ -0,0 +1,5 @@
package io.shinhanlife.glow;
public @interface GlowControllerId {
String value();
}

View File

@@ -0,0 +1,9 @@
package io.shinhanlife.glow;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface GlowIndexPaging {
}

View File

@@ -0,0 +1,15 @@
package io.shinhanlife.glow;
import java.lang.annotation.*;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface GlowLogTarget {
Target[] value() default {};
enum Target {
FILE, CONSOLE
}
}

View File

@@ -0,0 +1,19 @@
package io.shinhanlife.glow;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("prototype")
public class GlowLogger {
private Logger log = LoggerFactory.getLogger(GlowLogger.class);
public void debug(String message, Object... args) { log.debug(message, args); }
public void info(String message, Object... args) { log.info(message, args); }
public void warn(String message, Object... args) { log.warn(message, args); }
public void error(String message, Object... args) { log.error(message, args); }
public void error(String message, Throwable t) { log.error(message, t); }
}

View File

@@ -0,0 +1,18 @@
package io.shinhanlife.glow;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;
import java.lang.annotation.*;
/**
* MyBatis Mapper 인터페이스를 나타내는 어노테이션
* MyBatis Mapper와 동일한 기능을 제공합니다.
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapper
@Component
public @interface GlowMybatisMapper {
}

View File

@@ -0,0 +1,7 @@
package io.shinhanlife.glow;
public @interface GlowServiceGroupId {
String value();
String description();
}

View File

@@ -0,0 +1,25 @@
package io.shinhanlife.glow;
import java.lang.annotation.*;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface GlowTrgmField {
/**
* 필드 순서
*/
int order();
/**
* 필드 길이
*/
int length();
/**
* 필드 설명
*/
String description() default "";
}

View File

@@ -0,0 +1,68 @@
package io.shinhanlife.glow;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import org.apache.ibatis.session.RowBounds;
import java.io.Serial;
import java.io.Serializable;
@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
@EqualsAndHashCode(callSuper = true)
public class PageInfo extends RowBounds implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 페이지번호 ( 입력값 )
*/
@GlowTrgmField(order = 1, length = 5, description = "페이지번호")
private int pageNo;
/**
* 페이지 데이터 건수 ( 열 건수, 입력값 )
*/
@GlowTrgmField(order = 2, length = 5, description = "페이지데이터건수")
private int pageDataCc;
/**
* 총페이지 수 ( 리턴값 )
*/
@GlowTrgmField(order = 3, length = 10, description = "총페이지수")
private int totaPageCn;
/**
* 총 페이지 데이터 건수 ( 리턴값 )
*/
@GlowTrgmField(order = 4, length = 10, description = "총페이지데이터건수")
private int totaPageDataCc;
public PageInfo(int pageNo, int pageDataCc) {
super(((pageNo <= 0 ? 1 : pageNo) - 1) * pageDataCc, pageDataCc);
this.pageNo = pageNo;
this.pageDataCc = pageDataCc;
}
public PageInfo() {
}
@JsonIgnore
@Override
public int getOffset() {
return super.getOffset();
}
@JsonIgnore
@Override
public int getLimit() {
return super.getLimit();
}
}

View File

@@ -0,0 +1,31 @@
package io.shinhanlife.glow;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
@Getter
@RequiredArgsConstructor
public enum ResponseCode {
/* ===================== 성공 ===================== */
SUCCESS(HttpStatus.OK, "정상 처리되었습니다."),
CREATED(HttpStatus.CREATED, "데이터 생성 성공"),
/* ===================== 클라이언트 오류 (4xx) ===================== */
BAD_REQUEST(HttpStatus.BAD_REQUEST, "잘못된 요청입니다."),
INVALID_PARAMETER(HttpStatus.BAD_REQUEST, "유효하지 않은 파라미터입니다."),
UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "인증이 필요합니다."),
FORBIDDEN(HttpStatus.FORBIDDEN, "접근 권한이 없습니다."),
NOT_FOUND(HttpStatus.NOT_FOUND, "요청한 리소스를 찾을 수 없습니다."),
METHOD_NOT_ALLOWED(HttpStatus.METHOD_NOT_ALLOWED, "허용되지 않은 HTTP 메서드입니다."),
CONFLICT(HttpStatus.CONFLICT, "이미 존재하는 데이터입니다."),
/* ===================== 서버 오류 (5xx) ===================== */
INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "서버 내부 오류가 발생했습니다."),
SERVICE_UNAVAILABLE(HttpStatus.SERVICE_UNAVAILABLE, "서비스를 사용할 수 없습니다.");
private final HttpStatus status;
private final String message;
}

View File

@@ -0,0 +1,111 @@
package io.shinhanlife.glow;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
public final class ResponseUtil {
private ResponseUtil() {
}
public static <T> ResponseEntity<BaseResponse<T>> ok() {
return ResponseEntity.ok(
BaseResponse.<T>builder()
.code(ResponseCode.SUCCESS.getStatus().value())
.message(ResponseCode.SUCCESS.getMessage())
.build()
);
}
public static <T> ResponseEntity<BaseResponse<T>> ok(T data) {
return ResponseEntity.ok(
BaseResponse.<T>builder()
.code(ResponseCode.SUCCESS.getStatus().value())
.message(ResponseCode.SUCCESS.getMessage())
.data(data)
.build()
);
}
public static <T> ResponseEntity<BaseResponse<T>> ok(T data, ResponseCode responseCode) {
return ResponseEntity.ok(
BaseResponse.<T>builder()
.code(responseCode.getStatus().value())
.message(responseCode.getMessage())
.data(data)
.build()
);
}
public static <T> ResponseEntity<BaseResponse<T>> error(
HttpStatus status, String code, String message
) {
return ResponseEntity.status(status)
.body(
BaseResponse.<T>builder()
.code(status.value())
.error(
BaseException.builder()
.code(code)
.message(message)
.build()
)
.build()
);
}
public static <T> ResponseEntity<BaseResponse<T>> error(
HttpStatus status, String code, String message, String exceptionName, String stackTrace
) {
return ResponseEntity.status(status)
.body(
BaseResponse.<T>builder()
.code(status.value())
.error(
BaseException.builder()
.code(code)
.message(message)
.exceptionName(exceptionName)
.exceptionDetail(stackTrace)
.build()
)
.build()
);
}
public static <T> ResponseEntity<BaseResponse<T>> okError(
HttpStatus status, String code, String message
) {
return ResponseEntity.ok(
BaseResponse.<T>builder()
.code(status.value())
.error(
BaseException.builder()
.code(code)
.message(message)
.build()
)
.build()
);
}
public static <T> ResponseEntity<BaseResponse<T>> okError(
HttpStatus status, String code, String message, String exceptionName, String stackTrace
) {
return ResponseEntity.ok(
BaseResponse.<T>builder()
.code(status.value())
.error(
BaseException.builder()
.code(code)
.message(message)
.exceptionName(exceptionName)
.exceptionDetail(stackTrace)
.build()
)
.build()
);
}
}

View File

@@ -0,0 +1,16 @@
package io.shinhanlife.glow.db.dto;
import java.util.Date;
public class AuditInfo {
private Date systRgiDt; // 시스템등록일시
private String systRgiPrafNo; // 시스템등록인사번호
private String systRgiOgnzNo; // 시스템등록조직번호
private String systRgiSystCd; // 시스템등록시스템코드
private String systRgiPrgrId; // 시스템등록프로그램ID
private Date systChgDt; // 시스템변경일시
private String systChgPrafNo; // 시스템변경인사번호
private String systChgOgnzNo; // 시스템변경조직번호
private String systChgSystCd; // 시스템변경시스템코드
private String systChgPrgrId; // 시스템변경프로그램ID
}

View File

@@ -0,0 +1,160 @@
-- ============================================================
-- AX HUB 역할-Tool/지식 권한 관리 DDL
-- 대상 스키마 : 프로젝트 AP 스키마 (S_EIAM_TIS 는 읽기전용 참조)
-- 작성일 : 2026-06-25
-- ============================================================
-- ① Tool 마스터
CREATE TABLE AX_TOOL_MST (
TOOL_ID VARCHAR(20) NOT NULL, -- Tool ID (PK)
TOOL_NM VARCHAR(100) NOT NULL, -- Tool명
TOOL_DS VARCHAR(500), -- Tool설명
TOOL_TYPE_CD VARCHAR(20), -- Tool유형코드 (MCP / FUNC / EXT)
PUSE_YN VARCHAR(1) DEFAULT 'Y',-- 사용여부
SYST_RGI_DT DATE,
SYST_RGI_PRAF_NO VARCHAR(8),
SYST_RGI_OGNZ_NO VARCHAR(7),
SYST_RGI_SYST_CD VARCHAR(3),
SYST_RGI_PRGR_ID VARCHAR(100),
SYST_CHG_DT DATE,
SYST_CHG_PRAF_NO VARCHAR(8),
SYST_CHG_OGNZ_NO VARCHAR(7),
SYST_CHG_SYST_CD VARCHAR(3),
SYST_CHG_PRGR_ID VARCHAR(100),
CONSTRAINT PK_AX_TOOL_MST PRIMARY KEY (TOOL_ID)
);
COMMENT ON TABLE AX_TOOL_MST IS 'AX HUB Tool 마스터';
COMMENT ON COLUMN AX_TOOL_MST.TOOL_ID IS 'Tool ID (PK)';
COMMENT ON COLUMN AX_TOOL_MST.TOOL_NM IS 'Tool명';
COMMENT ON COLUMN AX_TOOL_MST.TOOL_DS IS 'Tool설명';
COMMENT ON COLUMN AX_TOOL_MST.TOOL_TYPE_CD IS 'Tool유형코드 (MCP/FUNC/EXT)';
COMMENT ON COLUMN AX_TOOL_MST.PUSE_YN IS '사용여부 (Y/N)';
-- ② 지식(Knowledge) 마스터
CREATE TABLE AX_KNWL_MST (
KNWL_ID VARCHAR(20) NOT NULL, -- 지식 ID (PK)
KNWL_NM VARCHAR(100) NOT NULL, -- 지식명
KNWL_DS VARCHAR(500), -- 지식설명
KNWL_TYPE_CD VARCHAR(20), -- 지식유형코드 (PRODUCT/MANUAL/LEGAL 등)
PUSE_YN VARCHAR(1) DEFAULT 'Y',
SYST_RGI_DT DATE,
SYST_RGI_PRAF_NO VARCHAR(8),
SYST_RGI_OGNZ_NO VARCHAR(7),
SYST_RGI_SYST_CD VARCHAR(3),
SYST_RGI_PRGR_ID VARCHAR(100),
SYST_CHG_DT DATE,
SYST_CHG_PRAF_NO VARCHAR(8),
SYST_CHG_OGNZ_NO VARCHAR(7),
SYST_CHG_SYST_CD VARCHAR(3),
SYST_CHG_PRGR_ID VARCHAR(100),
CONSTRAINT PK_AX_KNWL_MST PRIMARY KEY (KNWL_ID)
);
COMMENT ON TABLE AX_KNWL_MST IS 'AX HUB 지식 마스터';
COMMENT ON COLUMN AX_KNWL_MST.KNWL_ID IS '지식 ID (PK)';
COMMENT ON COLUMN AX_KNWL_MST.KNWL_NM IS '지식명';
COMMENT ON COLUMN AX_KNWL_MST.KNWL_DS IS '지식설명';
COMMENT ON COLUMN AX_KNWL_MST.KNWL_TYPE_CD IS '지식유형코드 (PRODUCT/MANUAL/LEGAL/REPORT)';
COMMENT ON COLUMN AX_KNWL_MST.PUSE_YN IS '사용여부 (Y/N)';
-- ③ 역할-Tool 권한 매핑
-- SYST_ID + ROLE_NO → S_EIAM_TIS.AA_ROLE 참조 (FK 미설정: 스키마 분리 환경)
CREATE TABLE AX_ROLE_TOOL_ATHR (
ROLE_TOOL_ATHR_ID VARCHAR(20) NOT NULL, -- 역할Tool권한ID (PK)
SYST_ID VARCHAR(10) NOT NULL, -- 시스템ID (EIAM 연동 키)
ROLE_NO VARCHAR(50) NOT NULL, -- 역할번호 (EIAM AA_ROLE.ROLE_NO)
TOOL_ID VARCHAR(20) NOT NULL, -- Tool ID
PUSE_YN VARCHAR(1) DEFAULT 'Y',
SYST_RGI_DT DATE,
SYST_RGI_PRAF_NO VARCHAR(8),
SYST_RGI_OGNZ_NO VARCHAR(7),
SYST_RGI_SYST_CD VARCHAR(3),
SYST_RGI_PRGR_ID VARCHAR(100),
SYST_CHG_DT DATE,
SYST_CHG_PRAF_NO VARCHAR(8),
SYST_CHG_OGNZ_NO VARCHAR(7),
SYST_CHG_SYST_CD VARCHAR(3),
SYST_CHG_PRGR_ID VARCHAR(100),
CONSTRAINT PK_AX_ROLE_TOOL_ATHR PRIMARY KEY (ROLE_TOOL_ATHR_ID)
);
-- (SYST_ID, ROLE_NO, TOOL_ID) 중복 방지
CREATE UNIQUE INDEX UK_AX_ROLE_TOOL_ATHR
ON AX_ROLE_TOOL_ATHR (SYST_ID, ROLE_NO, TOOL_ID);
COMMENT ON TABLE AX_ROLE_TOOL_ATHR IS '역할-Tool 권한 매핑';
COMMENT ON COLUMN AX_ROLE_TOOL_ATHR.ROLE_TOOL_ATHR_ID IS '역할Tool권한ID (PK)';
COMMENT ON COLUMN AX_ROLE_TOOL_ATHR.SYST_ID IS '시스템ID';
COMMENT ON COLUMN AX_ROLE_TOOL_ATHR.ROLE_NO IS '역할번호 (EIAM)';
COMMENT ON COLUMN AX_ROLE_TOOL_ATHR.TOOL_ID IS 'Tool ID';
COMMENT ON COLUMN AX_ROLE_TOOL_ATHR.PUSE_YN IS '사용여부';
-- ④ 역할-지식 권한 매핑
CREATE TABLE AX_ROLE_KNWL_ATHR (
ROLE_KNWL_ATHR_ID VARCHAR(20) NOT NULL, -- 역할지식권한ID (PK)
SYST_ID VARCHAR(10) NOT NULL,
ROLE_NO VARCHAR(50) NOT NULL,
KNWL_ID VARCHAR(20) NOT NULL,
PUSE_YN VARCHAR(1) DEFAULT 'Y',
SYST_RGI_DT DATE,
SYST_RGI_PRAF_NO VARCHAR(8),
SYST_RGI_OGNZ_NO VARCHAR(7),
SYST_RGI_SYST_CD VARCHAR(3),
SYST_RGI_PRGR_ID VARCHAR(100),
SYST_CHG_DT DATE,
SYST_CHG_PRAF_NO VARCHAR(8),
SYST_CHG_OGNZ_NO VARCHAR(7),
SYST_CHG_SYST_CD VARCHAR(3),
SYST_CHG_PRGR_ID VARCHAR(100),
CONSTRAINT PK_AX_ROLE_KNWL_ATHR PRIMARY KEY (ROLE_KNWL_ATHR_ID)
);
CREATE UNIQUE INDEX UK_AX_ROLE_KNWL_ATHR
ON AX_ROLE_KNWL_ATHR (SYST_ID, ROLE_NO, KNWL_ID);
COMMENT ON TABLE AX_ROLE_KNWL_ATHR IS '역할-지식 권한 매핑';
COMMENT ON COLUMN AX_ROLE_KNWL_ATHR.ROLE_KNWL_ATHR_ID IS '역할지식권한ID (PK)';
COMMENT ON COLUMN AX_ROLE_KNWL_ATHR.SYST_ID IS '시스템ID';
COMMENT ON COLUMN AX_ROLE_KNWL_ATHR.ROLE_NO IS '역할번호 (EIAM)';
COMMENT ON COLUMN AX_ROLE_KNWL_ATHR.KNWL_ID IS '지식ID';
COMMENT ON COLUMN AX_ROLE_KNWL_ATHR.PUSE_YN IS '사용여부';
-- ============================================================
-- 샘플 데이터 (개발용)
-- ============================================================
INSERT INTO AX_TOOL_MST
(TOOL_ID, TOOL_NM, TOOL_DS, TOOL_TYPE_CD, PUSE_YN,
SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID,
SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID)
VALUES
('TOOL_A', '지식 검색', '지식베이스 내 문서 의미 기반 검색', 'MCP', 'Y',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100'),
('TOOL_B', 'DB 조회', '사내 데이터베이스 직접 조회 (GLOW)', 'MCP', 'Y',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100'),
('TOOL_C', '문서 생성', 'AI 기반 문서 초안 자동 생성', 'FUNC', 'Y',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100');
INSERT INTO AX_KNWL_MST
(KNWL_ID, KNWL_NM, KNWL_DS, KNWL_TYPE_CD, PUSE_YN,
SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID,
SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID)
VALUES
('KNWL_Q', '상품기초서류', '보험 상품 기초서류 약 8만건', 'PRODUCT', 'Y',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100'),
('KNWL_W', '업무매뉴얼', '내부 업무 매뉴얼 및 프로세스 가이드', 'MANUAL', 'Y',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100'),
('KNWL_E', '법률/규정', '보험업법 및 금융당국 규정', 'LEGAL', 'Y',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100');
COMMIT;

View File

@@ -0,0 +1,18 @@
spring.application.name=axhub-admin
# application.properties (?? ??, Redis ? ??)
server.port=8080
spring.datasource.url=jdbc:p6spy:h2:mem:testdb;DB_CLOSE_DELAY=-1;
spring.datasource.driverClassName=com.p6spy.engine.spy.P6SpyDriver
spring.datasource.username=sa
spring.datasource.password=password
spring.h2.console.enabled=true
mybatis.mapper-locations=classpath:mapper/**/*.xml
mybatis.type-aliases-package=
spring.sql.init.mode=always
mybatis.configuration.map-underscore-to-camel-case=true
logging.level.com.corundumstudio.socketio=DEBUG

258
src/main/resources/data.sql Normal file
View File

@@ -0,0 +1,258 @@
SET SCHEMA S_TIS;
-- INSERT 문 재정렬: 부모부터 삽입 (루트 -> 자식 순)
-- 루트 메뉴 먼저 (11: 샘플 화면, 10: AX HUB)
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (11, NULL, 'Sample', '/sample', '샘플 화면', '&#xe8d2;', 'N', NULL, 'N', 'N', NULL, 'N', 'N', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (10, NULL, 'AxHub', '/axhub', 'AX HUB', '&#xe7b9;', 'N', NULL, 'N', 'N', NULL, 'N', 'N', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 샘플 화면(11번) 자식 메뉴
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (1, 11, 'Dashboard', '/dashboard', '대시보드', '&#xe721;', 'N', NULL, 'N', 'N', NULL, 'N', 'N', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (5, 11, 'Widgets', '/widgets', '컴포넌트 모음', '&#xe81a;', 'N', NULL, 'N', 'N', NULL, 'N', 'N', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (126, 11, 'Template', '/template', '템플릿 센터', '&#xe860;', 'N', NULL, 'N', 'N', NULL, 'N', 'N', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (4, 11, 'Article', '/article', '기사 관리', '&#xe7ae;', 'N', NULL, 'N', 'N', NULL, 'N', 'N', 3, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (2, 11, 'User', '/user', '사용자 관리', '&#xe86e;', 'N', NULL, 'N', 'N', NULL, 'N', 'N', 4, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (3, 11, 'Menu', '/menu', '메뉴 관리', '&#xe8a4;', 'N', NULL, 'N', 'N', NULL, 'N', 'N', 5, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (18, 11, 'Result', '/result', '결과 페이지', '&#xe715;', 'N', NULL, 'N', 'N', NULL, 'N', 'N', 6, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (8, 11, 'Exception', '/exception', '예외 페이지', '&#xe820;', 'N', NULL, 'N', 'N', NULL, 'N', 'N', 7, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (9, 11, 'System', '/system', '시스템 설정', '&#xe7b9;', 'N', NULL, 'N', 'N', NULL, 'N', 'N', 8, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 1번 자식
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (101, 1, NULL, '/dashboard/console', '콘솔', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (102, 1, NULL, '/dashboard/analysis', '분석 페이지', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (103, 1, NULL, '/dashboard/kanban', '칸반보드', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 5번 자식
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (503, 5, NULL, '/widgets/icon-list', '아이콘 목록', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (504, 5, NULL, '/widgets/icon-selector', '아이콘 선택기', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (506, 5, NULL, '/widgets/excel', 'Excel 가져오기 내보내기', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (508, 5, NULL, '/widgets/count-to', '숫자 롤링', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'N', 3, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (509, 5, NULL, '/widgets/toastUI', 'ToastUI 에디터', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 4, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (511, 5, NULL, '/widgets/context-menu', '오른쪽 클릭 메뉴', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 5, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (513, 5, NULL, '/widgets/drag', '드래그', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 6, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 126번 자식
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (12601, 126, NULL, '/template/chat', '채팅', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (12602, 126, NULL, '/template/cards', '카드', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'N', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (12603, 126, NULL, '/template/banners', '배너', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'N', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (12604, 126, NULL, '/template/charts', '차트', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'N', 3, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (12605, 126, NULL, '/template/calendar', '캘린더', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 4, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 4번 자식
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (202, 4, NULL, '/article/article-list', '기사 목록', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (204, 4, NULL, '/article/detail', '기사 상세', NULL, 'N', NULL, 'Y', 'N', NULL, 'N', 'Y', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (205, 4, NULL, '/article/comment', '댓글 관리', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (201, 4, NULL, '/article/article-publish', '기사 게시', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 3, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 2번 자식
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (301, 2, NULL, '/user/account', '계정 관리', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (302, 2, NULL, '/user/department', '부서 관리', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (303, 2, NULL, '/user/role', '역할 권한', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (304, 2, NULL, '/user/user', '마이페이지', NULL, 'N', NULL, 'Y', 'Y', NULL, 'N', 'Y', 3, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 3번 자식 (중첩 메뉴 부모 ID 402로 수정)
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (401, 3, NULL, '/menu/menu', '메뉴 권한', '&#xe8a4;', 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (411, 3, NULL, '/menu/permission', '권한 제어', '&#xe831;', 'N', 'new', 'N', 'N', NULL, 'N', 'Y', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (402, 3, NULL, '/menu/nested', '중첩 메뉴', '&#xe676;', 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 402번 자식 (중첩 메뉴)
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (40201, 402, NULL, '/menu/nested/menu1', '메뉴1', '&#xe676;', 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (40202, 402, NULL, '/menu/nested/menu2', '메뉴2', '&#xe676;', 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (40203, 402, NULL, '/menu/nested/menu3', '메뉴3', '&#xe676;', 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 40202 자식
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (4020201, 40202, NULL, '/menu/nested/menu2/menu2-1', '메뉴2-1', '&#xe676;', 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 40203 자식
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (4020301, 40203, NULL, '/menu/nested/menu3/menu3-1', '메뉴3-1', '&#xe676;', 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (4020302, 40203, NULL, '/menu/nested/menu3/menu3-2', '메뉴3-2', '&#xe676;', 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 4020302 자식
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (402030201, 4020302, NULL, '/menu/nested/menu3/menu3-2/menu3-2-1', '메뉴3-2-1', '&#xe676;', 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 18번 자식
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (405, 18, NULL, '/result/success', '성공 페이지', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (404, 18, NULL, '/result/fail', '실패 페이지', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 8번 자식
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (801, 8, NULL, '/exception/403', '403', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (802, 8, NULL, '/exception/404', '404', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (803, 8, NULL, '/exception/500', '500', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 9번 자식
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (901, 9, NULL, '/system/setting', '시스템 설정', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (902, 9, NULL, '/system/api', 'API 관리', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (903, 9, NULL, '/system/log', '시스템 로그', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 10번 자식
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (1001, 10, NULL, '/axhub/auth', '권한설정', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 0, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO ZT_MENU (MENU_ID, PARENT_MENU_ID, NAME, PATH, TITLE, ICON, SHOW_BADGE, SHOW_TEXT_BADGE, IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE, ORDER_SEQ, IS_ACTIVE, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES (1002, 10, 'MenuMgmt', '/axhub/menu-mgmt', '메뉴 관리', NULL, 'N', NULL, 'N', 'N', NULL, 'N', 'Y', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- ============================================================
-- 샘플 데이터 (개발용)
-- ============================================================
INSERT INTO AX_TOOL_MST
(TOOL_ID, TOOL_NM, TOOL_DS, TOOL_TYPE_CD, PUSE_YN,
SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID,
SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID)
VALUES
('TOOL_A', '지식 검색', '지식베이스 내 문서 의미 기반 검색', 'MCP', 'Y',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100'),
('TOOL_B', 'DB 조회', '사내 데이터베이스 직접 조회 (GLOW)', 'MCP', 'Y',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100'),
('TOOL_C', '문서 생성', 'AI 기반 문서 초안 자동 생성', 'FUNC', 'Y',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100');
INSERT INTO AX_KNWL_MST
(KNWL_ID, KNWL_NM, KNWL_DS, KNWL_TYPE_CD, PUSE_YN,
SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID,
SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID)
VALUES
('KNWL_Q', '상품기초서류', '보험 상품 기초서류 약 8만건', 'PRODUCT', 'Y',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100'),
('KNWL_W', '업무매뉴얼', '내부 업무 매뉴얼 및 프로세스 가이드', 'MANUAL', 'Y',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100'),
('KNWL_E', '법률/규정', '보험업법 및 금융당국 규정', 'LEGAL', 'Y',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100',
CURRENT_DATE, 'SYSTEM', 'SYSTEM', 'AXH', 'SOATM0100');
COMMIT;
-- 역할 데이터
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','110','AI아키텍트','AI 시스템 아키텍처 설계 및 에이전트 구조 검토 담당자','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','106','데이터분석사용자','AI 분석 대시보드 및 에이전트 통계 조회 가능 사용자','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','29','일반사용자','AI Hub 기본 이용 권한이 부여된 전사 일반 직원','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','126','AI개발책임자','AI 서비스 개발을 총괄하는 책임자로 에이전트 빌드 파이프라인 최종 승인 권한 보유','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','133','AI운영책임자','AI 서비스 운영 및 에이전트 인프라를 총괄하는 책임자','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','122','AI위험관리자','AI 모델 리스크 평가 및 컴플라이언스 모니터링 담당자','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','125','AI감사인','AI 에이전트 활동 이력 및 데이터 사용 내역 감사 담당자','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','69','AI배포검토관','AI 모델 및 에이전트 서비스 배포 전 변경 검토 회의 주관자','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','4','AI개발자','AI 에이전트 및 서비스 개발에 참여하는 내부 및 협력사 직원','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','18','시스템관리자','AI Hub 전체 시스템 설정 및 에이전트 플랫폼 관리 담당자','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','123','AI서비스요청자','AI 기능 개발 및 에이전트 도입을 요청하는 전사 직원','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','132','AI검증자','AI 모델 및 에이전트 기능 검증에 참여하는 전사 직원','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','127','현업AI위험관리자','현업 부서 내 AI 서비스 도입 리스크 관리를 수행하는 직원','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','128','현업AI책임자','현업 부서 내 AI 서비스 개발 및 도입을 책임지는 직원','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','142','AI개발부서장','AI 개발 조직의 부서장으로 에이전트 개발 방향성 결정 권한 보유','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','143','AI운영부서장','AI 운영 조직의 부서장으로 에이전트 서비스 안정성 총괄','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','225','지식감사인','AI 지식베이스 무결성 및 에이전트 활동 이력 독립 감사 담당자','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-05-06 15:45:08','61003745','0997100','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_ROLE (SYST_ID,ROLE_NO,ROLE_NM,ROLE_DS,ASST_OWNR_ROLE_TYPE_CD,MASK_ECPT_MD_CD,INDV_INFO_ATHR_YN,MAIN_CST_IFIN_YN,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','144','AI품질관리자','AI 모델 성능 및 응답 품질 제3자 검증 담당자','ZZZ','N','N','N','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-05-03 13:30:07','61003745','0997100','SAA','EIAM' ) ;
-- 사용자 그룹
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011296', NULL ,'어플리케이션아키텍트','어플리케이션아키텍트','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011297', NULL ,'통계사용자','통계화면을 볼 수 있는 사용자','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011298', NULL ,'IT내부직원','ICT본부내 신한라이프 정직원 자동부여','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011299', NULL ,'IT개발책임자','(ICT본부만 해당)IT개발부서장 및 IT개발부서장 권한이양받은 파트장 (근거 있어야 함)','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011300', NULL ,'IT운영책임자','(ICT본부만 해당)IT운영부서장 및 IT운영부서장 권한이양받은 파트장 (근거 있어야 함)','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011301', NULL ,'RM','ICT본부내 IT RM그룹','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011302', NULL ,'IT감사인','ICT본부내 IT감사인','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011303', NULL ,'이행검토주관자','ICT본부내 변경관리회의 주관자','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011304', NULL ,'IT개발자','ICT본부내 신한라이프 정직원-도급직원 자동부여','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011305', NULL ,'관리자','IT개발관리시스템 설정 및 시스템 관리','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011306', NULL ,'IT개발의뢰자','신한라이프 전사 정직원 자동부여','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011307', NULL ,'UAT테스터','신한라이프 전사 정직원 자동부여','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011308', NULL ,'현업_RM','(ICT본부외 해당)IT개발업무를 수행하는 현업부서내 RM역할 수행직원','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011309', NULL ,'현업_개발책임자','(ICT본부외 해당)IT개발업무를 수행하는 현업부서내 IT개발부서장역할을 수행하는 직원','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011310', NULL ,'IT개발부서장','ICT본부내 개발 부서장 자동부여','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011311', NULL ,'IT운영부서장','ICT본부내 운영 부서장 자동부여','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011312', NULL ,'감사인','감사팀내 IT감사인','N',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-05-10 16:30:32','61003745','0997100','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU (SYST_ID,USER_GROU_ID,OGNZ_NO,USER_GROU_NM,USER_GROU_DS,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000000205','UG_0011313', NULL ,'품질관리자','제3자점검자','Y',TIMESTAMP '2022-04-19 12:19:18','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:17','99999999','9999999','SAA','EIAM' ) ;
-- 사용자 그룹-역할 관계
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000030452','0000000205','UG_0011312','225','N',TIMESTAMP '2022-05-06 09:35:00','61003745','0997100','SAA','EIAM',TIMESTAMP '2022-05-10 16:15:25','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000030428','0000000205','UG_0011296','110','Y',TIMESTAMP '2022-05-02 16:58:00','61003745','0997100','SAA','EIAM',TIMESTAMP '2022-05-02 17:00:23','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000030455','0000000205','UG_0011312','225','N',TIMESTAMP '2022-05-06 15:55:03','61003745','0997100','SAA','EIAM',TIMESTAMP '2022-05-10 16:15:25','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000030433','0000000205','UG_0011312','225','N',TIMESTAMP '2022-05-03 15:01:00','61003745','0997100','SAA','EIAM',TIMESTAMP '2022-05-10 16:15:25','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029430','0000000205','UG_0011298','29','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029431','0000000205','UG_0011299','126','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029432','0000000205','UG_0011300','133','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029433','0000000205','UG_0011301','122','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029434','0000000205','UG_0011302','125','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029435','0000000205','UG_0011303','69','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029436','0000000205','UG_0011304','4','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029437','0000000205','UG_0011305','18','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029438','0000000205','UG_0011306','123','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029439','0000000205','UG_0011307','132','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029440','0000000205','UG_0011308','127','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029441','0000000205','UG_0011309','128','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029442','0000000205','UG_0011310','142','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029443','0000000205','UG_0011311','143','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029444','0000000205','UG_0011312','225','N',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-05-10 16:15:25','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029445','0000000205','UG_0011313','144','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000030432','0000000205','UG_0011312','225','N',TIMESTAMP '2022-05-03 14:30:00','61003745','0997100','SAA','EIAM',TIMESTAMP '2022-05-10 16:15:25','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000030434','0000000205','UG_0011312','225','N',TIMESTAMP '2022-05-03 15:18:00','61003745','0997100','SAA','EIAM',TIMESTAMP '2022-05-10 16:15:25','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029428','0000000205','UG_0011296','110','N',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-05-02 16:15:25','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USER_GROU_role_rtns (USER_GROU_ROLE_RTNS_ID,SYST_ID,USER_GROU_ID,ROLE_NO,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000029429','0000000205','UG_0011297','106','Y',TIMESTAMP '2022-04-19 12:19:19','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:30:24','99999999','9999999','SAA','EIAM') ;
-- 사용자-그룹관계
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000390266','0000000205','09861303','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000389612','0000000205','61005896','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000390990','0000000205','09861100','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000390096','0000000205','09861195','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000390103','0000000205','61005899','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000390377','0000000205','09861194','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000390201','0000000205','09861302','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000390396','0000000205','61005872','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000390209','0000000205','09861196','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000390236','0000000205','61005905','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000391388','0000000205','09861195','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000389987','0000000205','61005898','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000389376','0000000205','61005886','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000391283','0000000205','09861303','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000389378','0000000205','61005873','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000389388','0000000205','09861194','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000389410','0000000205','09861096','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000391162','0000000205','09861196','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000390709','0000000205','61005895','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000391138','0000000205','09861197','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000391142','0000000205','09861102','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000389116','0000000205','09861101','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000389667','0000000205','09861100','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000389185','0000000205','61005895','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000391098','0000000205','09861097','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000388336','0000000205','09861097','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000388550','0000000205','61005896','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000388825','0000000205','61005872','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000388839','0000000205','61005886','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000388149','0000000205','61005873','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000388081','0000000205','09861096','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000388097','0000000205','09861102','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000388116','0000000205','61005905','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000388229','0000000205','61005899','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000389054','0000000205','09861197','UG_0011306',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000389005','0000000205','09861302','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000390044','0000000205','09861101','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC_user_grou_rtns (USAC_USER_GROU_RTNS_ID,SYST_ID,PRAF_NO,USER_GROU_ID,VLDT_YMD,EXPR_YMD,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('0000389007','0000000205','61005898','UG_0011307',TIMESTAMP '2022-04-19 00:00:00',TIMESTAMP '9999-12-31 00:00:00','Y',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM',TIMESTAMP '2022-04-19 12:21:14','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('09861101','김정우','0993129','ZnNnIt2Vpx0VuIFtTTC4X-fRMEUZVxibJyigyjw58Ms=','N08550701','영업지원시스템기획-운영','80SR','Sr','810135','챕터원','Y',TIMESTAMP '2021-04-21 05:04:04','99999999','9999999','SAA','0000000002',TIMESTAMP '2025-07-01 12:34:37','99999999','9999999','SAA','EIAM') ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('09861102','한준영','0999200','hIX9bJ9IISfan3Gv8RU3huipr7otRghkLqlNgyw8ZVc=','N08580303','내부통제','80SR','Sr','810030','팀원','Y',TIMESTAMP '2021-04-21 05:04:08','99999999','9999999','SAA','0000000002',TIMESTAMP '2023-04-01 12:31:16','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('09861197','최원진','0995400','QhUqiS4UN6Byc+Z9n7xs8AzRTe4FeArLtMyNHtGGi10=','N08540202','계약심사','80SR','Sr','810030','팀원','Y',TIMESTAMP '2021-04-21 05:04:59','99999999','9999999','SAA','0000000002',TIMESTAMP '2023-04-01 12:30:18','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('09861096','이석진','0995146','WfydcrzCqws+QIilkz13iXWxHeXTgZ+knGEvxuzUFjE=','N08620101','고객서비스 업무지원','80SR','Sr','810114','CS지원','Y',TIMESTAMP '2021-04-21 05:04:59','99999999','9999999','SAA','0000000002',TIMESTAMP '2025-05-01 12:34:43','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('09861097','김남중','0993203','wd12hSaDEPA5UbaPxrPaCZqHO-w23cd7WLhkzHz01+s=','N08550803','제휴마케팅기획관리','80SR','Sr','810030','팀원','Y',TIMESTAMP '2021-04-21 05:04:10','99999999','9999999','SAA','0000000002',TIMESTAMP '2024-10-10 15:41:26','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('09861194','윤승로','0993134','XuVpEqWforwy4JgbLOOO7Qc3OTMM2uXFucCXgXAKPec=','N08550209','FC교육운영','80SR','Sr','810030','팀원','Y',TIMESTAMP '2021-04-21 05:04:59','99999999','9999999','SAA','0000000002',TIMESTAMP '2024-11-01 12:41:52','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('09861303','박범진','0999200','MTa1Jvmkzhwk+-5cnsORvnXAwLCyWYs5tiPa9xgVrPQ=','N08550301','GA채널기획관리','80MST','Mst','810122','파트원','Y',TIMESTAMP '2021-04-21 05:04:01','99999999','9999999','SAA','0000000002',TIMESTAMP '2025-01-01 12:31:03','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('09861302','문준호','0995400','XafkrGHaWLTxackt7T2NsjCAUXBF3uyjMNAXVyUSvC4=','N08560301','소비자보호기획','80SR','Sr','810122','파트원','Y',TIMESTAMP '2021-04-21 05:04:08','99999999','9999999','SAA','0000000002',TIMESTAMP '2025-02-01 12:30:54','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('09861100','윤희준','0993203','X-4VwtIV1YCBR6+0UqZBVHqk9GpqHy3AMDJYKihWQhk=','N08560101','계약관리','80SR','Sr','810122','파트원','Y',TIMESTAMP '2021-04-21 05:04:04','99999999','9999999','SAA','0000000002',TIMESTAMP '2025-02-01 12:30:55','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('09861195','박준영','0993203','tyg5izJmKkXYqIa6YfKp0Y42yIUjrhY+-6hgYZ8Vtmo=','N08510105','부서총괄','80MGR','Mgr','810015','팀장','Y',TIMESTAMP '2021-04-21 05:04:02','99999999','9999999','SAA','0000000002',TIMESTAMP '2025-01-01 12:30:55','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('09861196','정재용','0993129','wPIIdQ3PwXlj5fxgtjWzkZs4yagmbAC9kDU5dNq6sKw=','N08520101','고객DB운영','80SR','Sr','810135','챕터원','Y',TIMESTAMP '2021-04-21 05:04:04','99999999','9999999','SAA','0000000002',TIMESTAMP '2024-10-10 15:41:11','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('61005872','동영예','0993129','bgHjYQyZochoxQXjI2stZf4dmHANf7r514SxeGnHJL0=','N08550203','FC채널지원','80SR','Sr','810030','팀원','Y',TIMESTAMP '2021-04-21 05:04:04','99999999','9999999','SAA','0000000002',TIMESTAMP '2025-08-01 12:39:02','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('61005873','동한름','0993129','Vip4QCNT4HYfB9Pa86g7XsEw+LBu02H5BlbDo-W7eQw=','N08580101','내부감사','80SR','Sr','810030','팀원','Y',TIMESTAMP '2021-04-21 05:04:05','99999999','9999999','SAA','0000000002',TIMESTAMP '2024-10-10 15:41:14','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('61005886','빈길들','0993134','yPGgtuE14m+po6oyB9CfxEIilfrEzPxfi-xN0LXG4t8=','N08560302','고객민원관리','80SR','Sr','810122','파트원','Y',TIMESTAMP '2021-04-21 05:04:04','99999999','9999999','SAA','0000000002',TIMESTAMP '2025-02-01 12:31:08','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('61005895','오해나','0993134','YNscG5QLZ1B8KIrBUIeGlK8otbz94A1RJdhh8mRNlGA=','N08900804','육아휴직','80SR','Sr','810095','기타','Y',TIMESTAMP '2021-04-21 05:04:03','99999999','9999999','SAA','0000000002',TIMESTAMP '2025-09-01 12:34:52','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('61005896','동복수','0993134','BMRwD1vs0bmNdZBBs5VBMq1V0OUTH7AeQdKHwUQvQqw=','N08540302','보험금심사기획-지원','80MGR','Mgr','810030','팀원','Y',TIMESTAMP '2021-04-21 05:04:05','99999999','9999999','SAA','0000000002',TIMESTAMP '2025-06-01 12:31:09','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('61005898','동권문','0995400','jyBPF4WMlcE8On8jG9XiWYlV92t5f1MkGKRe2N+xZ+8=','N08540202','계약심사','80SR','Sr','810030','팀원','Y',TIMESTAMP '2021-04-21 05:04:05','99999999','9999999','SAA','0000000002',TIMESTAMP '2025-01-01 12:31:51','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('61005899','심복','0995400','pH9Da+rtRLXLu9oKplGsqvcrF5rL5N8ZVfInlRMa-Vs=','N08550302','GA채널지원','80SR','Sr','810030','팀원','Y',TIMESTAMP '2021-04-21 05:04:02','99999999','9999999','SAA','0000000002',TIMESTAMP '2025-01-01 12:31:11','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_USAC (PRAF_NO,PRAF_NM,OGNZ_NO,ADDRE,PRAF_OFDU_CD,PRAF_OFDU_NM,PRAF_OFLE_CD,PRAF_OFLE_NM,PRAF_DUTY_CD,PRAF_DUTY_NM,PUSE_YN,SYST_RGI_DT,SYST_RGI_PRAF_NO,SYST_RGI_OGNZ_NO,SYST_RGI_SYST_CD,SYST_RGI_PRGR_ID,SYST_CHG_DT,SYST_CHG_PRAF_NO,SYST_CHG_OGNZ_NO,SYST_CHG_SYST_CD,SYST_CHG_PRGR_ID) VALUES ('61005905','모중제','0995400','+GR4ai78TrPdOiSDkJ+SbjCiwWQfO9QbSdKD7Kydpis=','N08560507','고객서비스지원','80MGR','Mgr','810122','파트원','Y',TIMESTAMP '2021-04-21 05:04:09','99999999','9999999','SAA','0000000002',TIMESTAMP '2024-10-10 15:46:12','99999999','9999999','SAA','EIAM' ) ;
INSERT INTO S_EIAM_TIS.AA_OGNZ (OGNZ_NM, OGNZ_ABR_NM, OGNZ_NO, SPPO_GONZ_NO, VLDT_YMD, PUSE_YN, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES ('총무팀', '총무팀', '0993129', 'shinhanlife@shinhanlife.com', '20260101', 'Y', TIMESTAMP '2023-01-01 12:00:00', 'A1234567', '7654321', 'SYS', 'PROG001', TIMESTAMP '2023-01-01 12:00:00', 'A1234567', '7654321', 'SYS', 'PROG001');
INSERT INTO S_EIAM_TIS.AA_OGNZ (OGNZ_NM, OGNZ_ABR_NM, OGNZ_NO, SPPO_GONZ_NO, VLDT_YMD, PUSE_YN, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES ('재무팀', '재무팀', '0999200', 'shinhanlife@shinhanlife.com', '20260101', 'Y', TIMESTAMP '2023-01-01 12:00:00', 'A1234567', '7654321', 'SYS', 'PROG001', TIMESTAMP '2023-01-01 12:00:00', 'A1234567', '7654321', 'SYS', 'PROG001');
INSERT INTO S_EIAM_TIS.AA_OGNZ (OGNZ_NM, OGNZ_ABR_NM, OGNZ_NO, SPPO_GONZ_NO, VLDT_YMD, PUSE_YN, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES ('개발팀', '개발팀', '0995400', 'shinhanlife@shinhanlife.com', '20260101', 'Y', TIMESTAMP '2023-01-01 12:00:00', 'A1234567', '7654321', 'SYS', 'PROG001', TIMESTAMP '2023-01-01 12:00:00', 'A1234567', '7654321', 'SYS', 'PROG001');
INSERT INTO S_EIAM_TIS.AA_OGNZ (OGNZ_NM, OGNZ_ABR_NM, OGNZ_NO, SPPO_GONZ_NO, VLDT_YMD, PUSE_YN, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES ('구매팀', '구매팀', '0995146', 'shinhanlife@shinhanlife.com', '20260101', 'Y', TIMESTAMP '2023-01-01 12:00:00', 'A1234567', '7654321', 'SYS', 'PROG001', TIMESTAMP '2023-01-01 12:00:00', 'A1234567', '7654321', 'SYS', 'PROG001');
INSERT INTO S_EIAM_TIS.AA_OGNZ (OGNZ_NM, OGNZ_ABR_NM, OGNZ_NO, SPPO_GONZ_NO, VLDT_YMD, PUSE_YN, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES ('AI사업부', 'AI사업부', '0993203', 'shinhanlife@shinhanlife.com', '20260101', 'Y', TIMESTAMP '2023-01-01 12:00:00', 'A1234567', '7654321', 'SYS', 'PROG001', TIMESTAMP '2023-01-01 12:00:00', 'A1234567', '7654321', 'SYS', 'PROG001');
INSERT INTO S_EIAM_TIS.AA_OGNZ (OGNZ_NM, OGNZ_ABR_NM, OGNZ_NO, SPPO_GONZ_NO, VLDT_YMD, PUSE_YN, SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID, SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID) VALUES ('보안팀', '보안팀', '0993134', 'shinhanlife@shinhanlife.com', '20260101', 'Y', TIMESTAMP '2023-01-01 12:00:00', 'A1234567', '7654321', 'SYS', 'PROG001', TIMESTAMP '2023-01-01 12:00:00', 'A1234567', '7654321', 'SYS', 'PROG001');

View File

@@ -0,0 +1,193 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.shinhanlife.axhub.biz.so.atm.domain.repository.AccessMgmtMapper">
<resultMap id="roleResultMap" type="io.shinhanlife.axhub.biz.so.atm.dto.RoleListOutDto">
<result column="SYST_ID" property="systId"/>
<result column="ROLE_NO" property="roleNo"/>
<result column="ROLE_NM" property="roleNm"/>
<result column="ROLE_DS" property="roleDs"/>
<result column="PUSE_YN" property="puseYn"/>
</resultMap>
<resultMap id="athrItemResultMap" type="io.shinhanlife.axhub.biz.so.atm.dto.AthrItemOutDto">
<result column="RESOURCE_ID" property="resourceId"/>
<result column="RESOURCE_NM" property="resourceNm"/>
<result column="RESOURCE_DS" property="resourceDs"/>
<result column="TYPE_CODE" property="typeCode"/>
</resultMap>
<!-- 역할 목록 조회 -->
<select id="selectRoles" parameterType="io.shinhanlife.axhub.biz.so.atm.dto.RoleListInDto"
resultMap="roleResultMap">
SELECT
SYST_ID,
ROLE_NO,
ROLE_NM,
ROLE_DS,
PUSE_YN
FROM
S_EIAM_TIS.AA_ROLE
<where>
<if test="systId != null and systId != ''">
AND SYST_ID = #{systId}
</if>
<if test="puseYn != null and puseYn != ''">
AND PUSE_YN = #{puseYn}
</if>
<if test="keyword != null and keyword != ''">
AND ROLE_NM LIKE '%' || #{keyword} || '%'
</if>
</where>
ORDER BY ROLE_NM ASC
</select>
<!-- Tool 마스터 전체 조회 -->
<select id="selectAllTools" resultMap="athrItemResultMap">
SELECT
TOOL_ID AS RESOURCE_ID,
TOOL_NM AS RESOURCE_NM,
TOOL_DS AS RESOURCE_DS,
TOOL_TYPE_CD AS TYPE_CODE
FROM
AX_TOOL_MST
WHERE
PUSE_YN = 'Y'
ORDER BY
TOOL_NM ASC
</select>
<!-- 지식 마스터 전체 조회 -->
<select id="selectAllKnwls" resultMap="athrItemResultMap">
SELECT
KNWL_ID AS RESOURCE_ID,
KNWL_NM AS RESOURCE_NM,
KNWL_DS AS RESOURCE_DS,
KNWL_TYPE_CD AS TYPE_CODE
FROM
AX_KNWL_MST
WHERE
PUSE_YN = 'Y'
ORDER BY
KNWL_NM ASC
</select>
<!-- 역할에 부여된 Tool ID 목록 -->
<select id="selectGrantedToolIds" parameterType="io.shinhanlife.axhub.biz.so.atm.dto.AthrSearchInDto"
resultType="string">
SELECT
TOOL_ID
FROM
AX_ROLE_TOOL_ATHR
WHERE
SYST_ID = #{systId}
AND ROLE_NO = #{roleNo}
AND PUSE_YN = 'Y'
</select>
<!-- 역할에 부여된 지식 ID 목록 -->
<select id="selectGrantedKnwlIds" parameterType="io.shinhanlife.axhub.biz.so.atm.dto.AthrSearchInDto"
resultType="string">
SELECT
KNWL_ID
FROM
AX_ROLE_KNWL_ATHR
WHERE
SYST_ID = #{systId}
AND ROLE_NO = #{roleNo}
AND PUSE_YN = 'Y'
</select>
<!-- Tool 권한 전체 삭제 -->
<delete id="deleteToolAthr">
DELETE FROM AX_ROLE_TOOL_ATHR
WHERE
SYST_ID = #{systId}
AND ROLE_NO = #{roleNo}
</delete>
<!-- Tool 권한 단건 삽입 -->
<insert id="insertToolAthr" parameterType="io.shinhanlife.axhub.biz.so.atm.dto.RoleToolAthrInDto">
INSERT INTO AX_ROLE_TOOL_ATHR (
ROLE_TOOL_ATHR_ID,
SYST_ID,
ROLE_NO,
TOOL_ID,
PUSE_YN,
SYST_RGI_DT,
SYST_RGI_PRAF_NO,
SYST_RGI_OGNZ_NO,
SYST_RGI_SYST_CD,
SYST_RGI_PRGR_ID,
SYST_CHG_DT,
SYST_CHG_PRAF_NO,
SYST_CHG_OGNZ_NO,
SYST_CHG_SYST_CD,
SYST_CHG_PRGR_ID
) VALUES (
#{roleToolAthrId},
#{systId},
#{roleNo},
#{toolId},
#{puseYn},
#{systRgiDt},
#{systRgiPrafNo},
#{systRgiOgnzNo},
#{systRgiSystCd},
#{systRgiPrgrId},
#{systChgDt},
#{systChgPrafNo},
#{systChgOgnzNo},
#{systChgSystCd},
#{systChgPrgrId}
)
</insert>
<!-- 지식 권한 전체 삭제 -->
<delete id="deleteKnwlAthr">
DELETE FROM AX_ROLE_KNWL_ATHR
WHERE
SYST_ID = #{systId}
AND ROLE_NO = #{roleNo}
</delete>
<!-- 지식 권한 단건 삽입 -->
<insert id="insertKnwlAthr" parameterType="io.shinhanlife.axhub.biz.so.atm.dto.RoleKnwlAthrInDto">
INSERT INTO AX_ROLE_KNWL_ATHR (
ROLE_KNWL_ATHR_ID,
SYST_ID,
ROLE_NO,
KNWL_ID,
PUSE_YN,
SYST_RGI_DT,
SYST_RGI_PRAF_NO,
SYST_RGI_OGNZ_NO,
SYST_RGI_SYST_CD,
SYST_RGI_PRGR_ID,
SYST_CHG_DT,
SYST_CHG_PRAF_NO,
SYST_CHG_OGNZ_NO,
SYST_CHG_SYST_CD,
SYST_CHG_PRGR_ID
) VALUES (
#{roleKnwlAthrId},
#{systId},
#{roleNo},
#{knwlId},
#{puseYn},
#{systRgiDt},
#{systRgiPrafNo},
#{systRgiOgnzNo},
#{systRgiSystCd},
#{systRgiPrgrId},
#{systChgDt},
#{systChgPrafNo},
#{systChgOgnzNo},
#{systChgSystCd},
#{systChgPrgrId}
)
</insert>
</mapper>

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.shinhanlife.axhub.common.session.domain.repository.ZtUsacRepository">
<select id="selectZtUsac" resultType="io.shinhanlife.axhub.common.session.dto.ZtUsacOutDto">
SELECT
AU.PRAF_NO, -- 인사번호
AU.PRAF_NM, -- 인사명
AU.OGNZ_NO, -- 조직번호
OG.OGNZ_NM, -- 조직명
AU.ADDRE, -- 이메일주소
AU.PRAF_OFDU_CD, -- 인사직무코드
AU.PRAF_OFDU_NM, -- 인사직무명
AU.PRAF_OFLE_CD, -- 인사직급코드
AU.PRAF_OFLE_NM, -- 인사직급명
AU.PRAF_DUTY_CD, -- 인사직책코드
AU.PRAF_DUTY_NM, -- 인사직책명
AU.MNGR_PRAF_NO, -- 관리자인사번호
AU.PUSE_YN, -- 사용여부
LISTAGG(URR.ROLE_NO, ',') WITHIN GROUP (ORDER BY URR.ROLE_NO) AS ROLE_NO_STR_LIST,
LISTAGG(UR.ROLE_NM, ',') WITHIN GROUP (ORDER BY URR.ROLE_NO) AS ROLE_NM_STR_LIST,
LISTAGG(AM.TGTR_PRAF_NO, ',') WITHIN GROUP (ORDER BY AM.TGTR_PRAF_NO) AS TGTR_PRAF_NO_STR_LIST,
LISTAGG(AM.TGTR_OGNZ_NO, ',') WITHIN GROUP (ORDER BY AM.TGTR_PRAF_NO) AS TGTR_OGNZ_NO_STR_LIST
FROM
S_EIAM_TIS.AA_USAC AU
INNER JOIN
S_EIAM_TIS.AA_USAC_USER_GROU_RTNS UGR ON AU.PRAF_NO = UGR.PRAF_NO
INNER JOIN
S_EIAM_TIS.AA_USER_GROU UG ON UGR.USER_GROU_ID = UG.USER_GROU_ID
INNER JOIN
S_EIAM_TIS.AA_USER_GROU_ROLE_RTNS URR ON UG.USER_GROU_ID = URR.USER_GROU_ID
INNER JOIN
S_EIAM_TIS.AA_ROLE UR ON URR.ROLE_NO = UR.ROLE_NO
LEFT OUTER JOIN
S_EIAM_TIS.AA_MNDT AM ON AM.PRAF_NO = AU.PRAF_NO
INNER JOIN
S_EIAM_TIS.AA_OGNZ OG ON OG.OGNZ_NO = AU.OGNZ_NO
WHERE
AU.PRAF_NO = #{prafNo}
GROUP BY
AU.PRAF_NO, AU.PRAF_NM, AU.OGNZ_NO, AU.ADDRE, AU.PRAF_OFDU_CD, AU.PRAF_OFDU_NM, AU.PRAF_OFLE_CD, AU.PRAF_OFLE_NM, AU.PRAF_DUTY_CD, AU.PRAF_DUTY_NM, AU.MNGR_PRAF_NO, AU.PUSE_YN;
</select>
</mapper>

View File

@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.shinhanlife.axhub.biz.sm.mmg.domain.repository.MenuRepository">
<select id="selectMenu" resultType="io.shinhanlife.axhub.biz.sm.mmg.dto.MenuOutDto">
SELECT MENU_ID
, PARENT_MENU_ID
, NAME
, PATH
, TITLE
, ICON
, IS_HIDE
, IS_HIDE_TAB
, LINK
, IS_IFRAME
, KEEP_ALIVE
, ORDER_SEQ
, IS_ACTIVE
FROM S_TIS.ZT_MENU
WHERE 1=1
<if test="isActive != null and isActive != ''">
AND IS_ACTIVE = #{isActive}
</if>
<if test="path != null and path != ''">
AND PATH LIKE CONCAT('%', #{path}, '%')
</if>
<if test="title != null and title != ''">
AND TITLE LIKE CONCAT('%', #{title}, '%')
</if>
ORDER BY ORDER_SEQ ASC
</select>
<select id="selectMenuById" resultType="io.shinhanlife.axhub.biz.sm.mmg.dto.MenuOutDto">
SELECT MENU_ID
, PARENT_MENU_ID
, NAME
, PATH
, TITLE
, ICON
, IS_HIDE
, IS_HIDE_TAB
, LINK
, IS_IFRAME
, KEEP_ALIVE
, ORDER_SEQ
, IS_ACTIVE
FROM S_TIS.ZT_MENU
WHERE MENU_ID = #{menuId}
</select>
<insert id="insertMenu"
parameterType="io.shinhanlife.axhub.biz.sm.mmg.dto.MenuSaveInDto"
useGeneratedKeys="true"
keyProperty="menuId">
INSERT INTO S_TIS.ZT_MENU (
PARENT_MENU_ID, NAME, PATH, TITLE, ICON,
IS_HIDE, IS_HIDE_TAB, LINK, IS_IFRAME, KEEP_ALIVE,
ORDER_SEQ, IS_ACTIVE,
SYST_RGI_DT, SYST_RGI_PRAF_NO, SYST_RGI_OGNZ_NO, SYST_RGI_SYST_CD, SYST_RGI_PRGR_ID,
SYST_CHG_DT, SYST_CHG_PRAF_NO, SYST_CHG_OGNZ_NO, SYST_CHG_SYST_CD, SYST_CHG_PRGR_ID
) VALUES (
#{parentMenuId}, #{name}, #{path}, #{title}, #{icon},
#{isHide}, #{isHideTab}, #{link}, #{isIframe}, #{keepAlive},
#{orderSeq}, #{isActive},
#{systRgiDt}, #{systRgiPrafNo}, #{systRgiOgnzNo}, #{systRgiSystCd}, #{systRgiPrgrId},
#{systChgDt}, #{systChgPrafNo}, #{systChgOgnzNo}, #{systChgSystCd}, #{systChgPrgrId}
)
</insert>
<update id="updateMenu" parameterType="io.shinhanlife.axhub.biz.sm.mmg.dto.MenuSaveInDto">
UPDATE S_TIS.ZT_MENU
SET
PARENT_MENU_ID = #{parentMenuId},
NAME = #{name},
PATH = #{path},
TITLE = #{title},
ICON = #{icon},
IS_HIDE = #{isHide},
IS_HIDE_TAB = #{isHideTab},
LINK = #{link},
IS_IFRAME = #{isIframe},
KEEP_ALIVE = #{keepAlive},
ORDER_SEQ = #{orderSeq},
IS_ACTIVE = #{isActive},
SYST_CHG_DT = #{systChgDt},
SYST_CHG_PRAF_NO = #{systChgPrafNo},
SYST_CHG_OGNZ_NO = #{systChgOgnzNo},
SYST_CHG_SYST_CD = #{systChgSystCd},
SYST_CHG_PRGR_ID = #{systChgPrgrId}
WHERE MENU_ID = #{menuId}
</update>
<delete id="deleteMenu">
DELETE FROM S_TIS.ZT_MENU
WHERE MENU_ID = #{menuId}
</delete>
</mapper>

Some files were not shown because too many files have changed in this diff Show More