Merge branch 'jenkins_with_weblogic' into devs/app_approval

# Conflicts:
#	CLAUDE.md
#	settings.gradle
#	src/main/java/com/eactive/eai/rms/onl/apim/approval/PortalApprovalManService.java
#	src/main/java/com/eactive/eai/rms/onl/apim/approval/app/PortalAppApprovalListener.java
#	src/main/java/com/eactive/eai/rms/onl/apim/approval/user/PortalUserApprovalListener.java
This commit is contained in:
Rinjae
2025-11-17 11:38:30 +09:00
119 changed files with 6107 additions and 3560 deletions
+5 -1
View File
@@ -239,4 +239,8 @@ gradle-app.setting
Doc/ Doc/
docs docs
build-gf63.sh build-gf63.sh
gradle-gf63.sh gradle-gf63.sh
eapim-admin-kjb/
.claude
+249 -146
View File
@@ -1,224 +1,280 @@
# CLAUDE.md # CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. 이 파일은 Claude Code (claude.ai/code)가 이 저장소의 코드를 작업할 때 참고할 가이드를 제공합니다.
## Project Overview ## 프로젝트 개요
eLink EMS (eLink Management System) is an enterprise API management platform consisting of three main applications: eLink EMS (eLink Management System)는 세 가지 주요 애플리케이션으로 구성된 엔터프라이즈 API 관리 플랫폼입니다:
- **eapim-admin**: Management console for configuration, monitoring, and statistics - **eapim-admin**: 구성, 모니터링, 통계를 위한 관리 콘솔
- **eapim-online**: API gateway for real-time transaction processing - **eapim-online**: 실시간 트랜잭션 처리를 위한 API 게이트웨이
- **eapim-portal**: Developer portal for API consumers (Spring Boot-based) - **eapim-portal**: API 소비자를 위한 개발자 포털 (Spring Boot 기반)
This directory (`eapim-admin`) contains the management console, built with Spring 5.3 and a hybrid ORM approach (JPA + iBATIS). 이 디렉토리(`eapim-admin`)는 Spring 5.3과 하이브리드 ORM 방식(JPA + iBATIS)으로 구축된 관리 콘솔을 포함합니다.
## Build & Development Commands ## 빌드 및 개발 명령어
### Building the Application ### 애플리케이션 빌드
eLink EMS (eLink Management System)는 eLink의 웹 기반 관리 서비스로, 구성, 모니터링 및 통계 기능을 제공합니다. Tomcat 또는 WebLogic에 배포되는 Spring 기반 Java 웹 애플리케이션입니다.
### 주요 기능
- 사용자 및 권한 관리
- 트랜잭션 로그 조회 (온라인/배치/대량)
- 통계 및 대시보드 모니터링
- 인터페이스, 레이아웃, 어댑터, 라우팅 관리
- 외부 시스템 연동 (UMS, EAI 배치)
## 빌드 및 개발 명령어
### 빌드 명령어
```bash ```bash
# Standard WAR build for Tomcat # 표준 빌드
gradle war gradle build
# Build without tests # Weblogic 배포용 빌드 (테스트 제외)
gradle build -x test
# WebLogic deployment (uses weblogic-web.xml)
gradle build -x test -Pprofile=weblogic gradle build -x test -Pprofile=weblogic
# Clean and rebuild # WAR 파일 빌드
gradle war
# 클린 빌드
gradle clean build gradle clean build
``` ```
### Running Tests ### 테스트 실행
```bash ```bash
# Run all tests # 모든 테스트 실행
gradle test gradle test
# Run specific test class # 특정 테스트 클래스 실행
gradle test --tests "com.example.ClassName" gradle test --tests "com.example.ClassName"
# 특정 테스트 패키지 실행 (JUnit 플랫폼 사용)
gradle test --tests "com.eactive.eai.rms.*"
``` ```
### Development Tasks ### 개발 태스크
```bash ```bash
# Assemble classes without packaging # 패키징 없이 클래스만 컴파일
gradle classes gradle classes
# Generate QueryDSL Q-classes and other annotations # QueryDSL Q-classes 및 기타 애노테이션 생성
gradle compileJava gradle compileJava
# View dependency tree # 의존성 트리 보기
gradle dependencies gradle dependencies
# List all available tasks # 사용 가능한 모든 태스크 목록
gradle tasks --all gradle tasks --all
``` ```
## Architecture & Module Dependencies ## 아키텍처 및 모듈 의존성
### Multi-Module Structure ### 멀티 모듈 구조
eapim-admin references modules from the sibling `eapim-online` directory via settings.gradle: eapim-admin은 settings.gradle을 통해 형제 디렉토리 `eapim-online`의 모듈들을 참조합니다:
``` ```
eapim-admin (root project) eapim-admin (root project)
├── elink-online-core # Core interfaces and domain models ├── elink-online-core # 핵심 인터페이스 및 도메인 모델
├── elink-online-core-jpa # JPA entities and repositories ├── elink-online-core-jpa # JPA 엔티티 및 리포지토리
├── elink-online-transformer # Message transformation logic ├── elink-online-transformer # 메시지 변환 로직
├── elink-online-common # Shared utilities ├── elink-online-common # 공통 유틸리티
├── elink-online-emsclient # EMS client communication ├── elink-online-emsclient # EMS 클라이언트 통신
├── elink-portal-common # Portal shared components (JPA entities) ├── elink-online-adapter # 통신 어댑터
── kjb-safedb # Custom encryption library ── elink-portal-common # 포털 공통 컴포넌트 (JPA 엔티티)
├── kjb-safedb # 커스텀 암호화 라이브러리
└── eapim-admin-kjb # KJB 은행 특화 커스터마이제이션
``` ```
All module projects are located in `../eapim-online/` and `../` relative to this directory. 모든 모듈 프로젝트는 이 디렉토리 기준으로 `../eapim-online/`, `../elink-portal-common/` 등에 위치합니다.
### Hybrid ORM Approach ### 하이브리드 ORM 방식
This application uses **both JPA and iBATIS**: 이 애플리케이션은 **JPA와 iBATIS 모두를 사용**합니다:
- **JPA/Hibernate**: Modern data access via `elink-portal-common` (Spring Data repositories) - **JPA/Hibernate**: `elink-portal-common`을 통한 현대적인 데이터 액세스 (Spring Data repositories)
- **iBATIS**: Legacy SQL mapping for existing code (will be migrated over time) - **iBATIS**: 기존 코드를 위한 레거시 SQL 매핑 (점진적으로 마이그레이션 예정)
When working with data access: 데이터 액세스 작업 시:
- New features should use JPA with Spring Data repositories - 새로운 기능은 JPA와 Spring Data repositories를 사용해야 합니다
- Legacy iBATIS mappers are in `src/main/resources/sql/` and configured via Spring XML - 레거시 iBATIS 매퍼는 `src/main/resources/com/eactive/eai/**/*.xml`에 있으며 Spring XML을 통해 설정됩니다
### Code Generation ### 코드 생성
The build process generates: 빌드 프로세스에서 생성되는 것들:
- **QueryDSL Q-classes**: Type-safe query classes - **QueryDSL Q-classes**: 타입 안전 쿼리 클래스
- **Lombok**: Getters/setters/builders via annotation processing - **Lombok**: 애노테이션 프로세싱을 통한 Getters/setters/builders
- **MapStruct**: Object mappers between DTOs and entities - **MapStruct**: DTO와 엔티티 간의 객체 매퍼
#### Dual Q-Class Generation (Gradle + Eclipse) #### 이중 Q-Class 생성 (Gradle + Eclipse)
This project uses **both Gradle and Eclipse annotation processors**, which means Q-classes are generated in **two locations**: 이 프로젝트는 **Gradle Eclipse 애노테이션 프로세서 모두를 사용**하므로, Q-classes가 **두 위치에 생성**됩니다:
1. **`build/generated/java/`** - Generated by Gradle when running `gradle compileJava` or `gradle build` 1. **`build/generated/java/`** - `gradle compileJava` 또는 `gradle build` 실행 시 Gradle이 생성
2. **`WebContent/generated/`** - Generated by Eclipse APT when building in Eclipse IDE 2. **`WebContent/generated/`** - Eclipse IDE에서 빌드 시 Eclipse APT가 생성
**This is expected behavior and intentional.** Both directories are in `.gitignore` and should NOT be committed. **이는 예상된 동작이며 의도적입니다.** 두 디렉토리 모두 `.gitignore`에 포함되어 있으며 커밋해서는 안 됩니다.
#### Working with Generated Code #### 생성된 코드 작업하기
- **Gradle builds**: Q-classes in `build/generated/java/` are automatically on the classpath - **Gradle 빌드**: `build/generated/java/`의 Q-classes가 자동으로 classpath에 포함됩니다
- **Eclipse IDE**: Q-classes in `WebContent/generated/` are automatically on the classpath - **Eclipse IDE**: `WebContent/generated/`의 Q-classes가 자동으로 classpath에 포함됩니다
- **After pulling updates**: Run `gradle compileJava` or refresh Eclipse project to regenerate Q-classes - **업데이트 pull 후**: `gradle compileJava`를 실행하거나 Eclipse 프로젝트를 새로고침하여 Q-classes를 재생성합니다
- **IDE errors on Q-classes**: Regenerate by running `gradle clean compileJava` or Eclipse → Project → Clean - **Q-classes IDE 오류 시**: `gradle clean compileJava` 또는 Eclipse → Project → Clean으로 재생성합니다
The duplication causes no issues since: 중복이 문제를 일으키지 않는 이유:
- Both tools generate identical Q-classes from the same JPA entities - 두 도구 모두 동일한 JPA 엔티티에서 동일한 Q-classes를 생성합니다
- Both output directories are gitignored - 두 출력 디렉토리 모두 gitignore됩니다
- Each tool uses its own generated classes (no classpath conflicts) - 각 도구는 자체 생성 클래스를 사용합니다 (classpath 충돌 없음)
## Local Development Setup ## 로컬 개발 환경 설정
### Required Environment Variables (Tomcat) ### 필수 환경 변수 (Tomcat)
``` ```
-Deai.datasource.type=DEV -Deai.datasource.type=DEV
-Dinst.Name=apimsSvr11 -Dinst.Name=emsSvr99
-Deai.tableowner=ems -Deai.tableowner=EMSADM
-Deai.systemmode=D -Deai.systemmode=D
-Dfile.encoding=utf-8 -Dfile.encoding=utf-8
-DLOGBACK_LOG_LEVEL=info -Dlogin.mode=db
-DLOGBACK_LOG_LEVEL=DEBUG
-Dlogback.configurationFile=classpath:logback-dev.xml
-Dhibernate.dialect=org.hibernate.dialect.Oracle12cDialect
-Dkjb_safedb.mode=fake
``` ```
### Database Configuration ### 개발 환경 설정
애플리케이션은 `WebContent/WEB-INF/properties/`의 환경별 프로퍼티 파일을 통해 설정됩니다:
- `env.D.properties` - 개발 환경
- `env.T.properties` - 테스트/스테이징 환경
- `env.P.properties` - 운영 환경
The application supports: **프로필 설정**
- **Oracle**: Production database - `-Pprofile=weblogic`: `web.xml` 대신 `weblogic-web.xml`을 사용 (DefaultServlet 문제 해결)
- **PostgreSQL**: Alternative production DB
- **H2**: In-memory database for tests
Database connection is configured via `eai.datasource.type` system property (DEV/STG/PROD). ### 데이터베이스 설정
### SafeDB Encryption Library 애플리케이션은 다음을 지원합니다:
- **Oracle**: 운영 데이터베이스 (주)
- **PostgreSQL/MariaDB**: 대체 운영 DB
- **H2**: 테스트용 인메모리 데이터베이스
The `kjb-safedb` module provides three operational modes: 데이터베이스 연결은 `eai.datasource.type` 시스템 프로퍼티(DEV/STG/PROD)를 통해 설정됩니다.
- **REAL**: Uses actual SafeDB native library
- **FAKE**: Development mode using SHA-256/AES-256 (no SafeDB installation required)
- **NONE**: Bypass encryption (for testing only)
In development, use FAKE mode if SafeDB is not installed locally. ### SafeDB 암호화 라이브러리
## Key Features & Functionality `kjb-safedb` 모듈은 세 가지 동작 모드를 제공합니다:
- **REAL**: 실제 SafeDB 네이티브 라이브러리 사용
- **FAKE**: SHA-256/AES-256을 사용하는 개발 모드 (SafeDB 설치 불필요)
- **NONE**: 암호화 우회 (테스트 전용)
The admin console manages all aspects of the eLink platform: 개발 시 SafeDB가 로컬에 설치되지 않은 경우 FAKE 모드를 사용합니다.
| Feature | Description | ## 주요 기능
|---------|-------------|
| User Management | User accounts and authorization |
| Transaction Logs | View online/batch/bulk transaction history |
| Statistics & Dashboard | Real-time monitoring and metrics |
| Interface Management | API interface configuration |
| Layout Management | Message layout definitions |
| Transformation Rules | Message transformation logic |
| Adapter Configuration | Protocol adapters (HTTP, TCP, etc.) |
| Routing Rules | Request routing and load balancing |
| Batch Processing | Batch interface and adapter management |
| Scheduler | Quartz-based job scheduling |
## Deployment Targets 관리 콘솔은 eLink 플랫폼의 모든 측면을 관리합니다:
The application can be deployed to: | 기능 | 설명 |
- **Tomcat** (default, development) |------|------|
- **WebLogic 14.1.2** (production, requires `-Pprofile=weblogic`) | 사용자 관리 | 사용자 계정 및 권한 |
- **JEUS** (supported) | 트랜잭션 로그 | 온라인/배치/대량 트랜잭션 이력 조회 |
- **JBoss/WildFly** (supported with descriptors) | 통계 및 대시보드 | 실시간 모니터링 및 메트릭 |
| 인터페이스 관리 | API 인터페이스 구성 |
| 레이아웃 관리 | 메시지 레이아웃 정의 |
| 변환 규칙 | 메시지 변환 로직 |
| 어댑터 설정 | 프로토콜 어댑터 (HTTP, TCP 등) |
| 라우팅 규칙 | 요청 라우팅 및 로드 밸런싱 |
| 배치 처리 | 배치 인터페이스 및 어댑터 관리 |
| 스케줄러 | Quartz 기반 작업 스케줄링 |
### WebLogic-Specific Build ## 배포 대상
When building for WebLogic, use the `weblogic` profile which replaces `web.xml` with `weblogic-web.xml` to address DefaultServlet issues: 애플리케이션은 다음 환경에 배포할 수 있습니다:
- **Tomcat** (기본, 개발)
- **WebLogic 14.1.2** (운영, `-Pprofile=weblogic` 필요)
- **JEUS** (지원)
- **JBoss/WildFly** (descriptors와 함께 지원)
### WebLogic 전용 빌드
WebLogic용 빌드 시, DefaultServlet 문제를 해결하기 위해 `web.xml``weblogic-web.xml`로 교체하는 `weblogic` 프로필을 사용합니다:
```bash ```bash
gradle build -x test -Pprofile=weblogic gradle build -x test -Pprofile=weblogic
``` ```
## Technology Stack ## 기술 스택
- **Java 8**: Enforced via Gradle toolchain - **Java 8**: Gradle toolchain을 통해 강제
- **Spring Framework 5.3.27**: Core framework - **Spring Framework 5.3.27**: 코어 프레임워크 (MVC, Data JPA)
- **Spring Data JPA 2.5.2**: Repository abstraction - **Spring Data JPA 2.5.2**: 리포지토리 추상화
- **Hibernate 5.4.33**: ORM implementation - **Hibernate 5.4.33/5.6.15**: ORM 구현 (JPA/ORM)
- **QueryDSL 5.0.0**: Type-safe queries - **QueryDSL 5.0.0**: 타입 안전 쿼리
- **iBATIS 2.3.4**: Legacy SQL mapping - **iBATIS 2.3.4**: 레거시 SQL 매핑
- **Quartz 2.2.1**: Job scheduling - **Quartz 2.2.1**: 작업 스케줄링
- **Apache POI 3.17**: Excel export functionality - **Apache POI 3.17**: Excel 내보내기 기능
- **Jackson 2.13.1**: JSON processing - **Jackson 2.13.1**: JSON 처리
- **Logback 1.2.10**: Logging framework/ㅊ - **Logback 1.2.10**: 로깅 프레임워크 (SLF4J와 함께)
- **AWS SDK 2.20.142**: S3 integration - **AWS SDK 2.20.142**: S3 연동
- **Kubernetes Client 18.0.1**: K8s management - **Kubernetes Client 18.0.1**: K8s 관리
- **EhCache**: 캐싱, **Lombok**: 코드 생성, **MapStruct**: 객체 매핑
## Project Conventions ## 프로젝트 규칙
### Package Structure ### 패키지 구조
``` ```
com.eactive.ems/ com.eactive.eai
├── controller/ # Spring MVC controllers ├── agent/command - 커맨드 패턴 구현
├── service/ # Business logic ├── common - 공통 유틸리티, iBatis, JSON 직렬화
├── dao/ # iBATIS DAOs (legacy) ├── custom - 고객사별 커스터마이제이션
├── repository/ # JPA repositories (via elink-portal-common) ├── rms - 메인 애플리케이션 코드
├── model/ # DTOs and view models │ ├── bap - 배치 처리 (BAP)
└── config/ # Spring configuration classes │ │ ├── adaptor - 배치 어댑터
│ │ ├── manage - 배치 관리 (메시지, 서버, 프로퍼티)
│ │ └── tansaction - 배치 트랜잭션 추적
│ ├── bat - 추가 배치 기능
│ ├── common - RMS 공통 (필터, 시작, 서비스)
│ ├── data - 데이터 엔티티, 리포지토리
│ ├── env - 환경 설정
│ ├── kakao - 카카오 연동
│ ├── onl - 온라인 트랜잭션 관리
│ │ ├── apim - API 관리 (포털 조직, 사용자, 승인)
│ │ ├── manage - 리소스 관리
│ │ └── transaction - 트랜잭션 처리
│ └── service - 비즈니스 서비스
└── ext.kjb - 광주은행(KJB) 확장
``` ```
### Spring Configuration ### Spring 설정
The application uses: 애플리케이션은 다음을 사용합니다:
- **XML-based configuration**: Legacy Spring XML in `WebContent/WEB-INF/` - **Root context**: `WebContent/WEB-INF/applicationContext.xml`
- **Java-based configuration**: Modern `@Configuration` classes - **Servlet context**: `WebContent/WEB-INF/springapp-servlet.xml`
- **Component scanning**: Enabled for annotated components - **환경별 설정**: `${eai.systemmode}` 시스템 프로퍼티 기반 로드
- **컴포넌트 스캔**: 애노테이션 기반 설정 활성화
### Logging ### 데이터 액세스 패턴
애플리케이션은 **이중 퍼시스턴스**를 사용합니다:
1. **JPA/Hibernate** - `com.eactive.eai.rms.data.entity`의 최신 엔티티 기반 코드용
2. **iBatis** - `src/main/resources/com/eactive/eai/**/*.xml`의 레거시 SQL 매핑용
- Uses **SLF4J** with **Logback** implementation 리포지토리는 Spring Data JPA 규칙을 사용하며, 서비스는 `@Service`, 컨트롤러는 `@RestController`/`@Controller`를 사용합니다.
- Log level controlled via `LOGBACK_LOG_LEVEL` system property
- All `log4j` dependencies are excluded (configurations in build.gradle)
## IDE Setup ### 주요 초기화
- `AppInitializer` - 시스템 프로퍼티를 설정하는 메인 애플리케이션 시작 빈
- `CustomizingAppInitializer` - 고객사별 초기화
- 시스템 프로퍼티: `inst.Name`, `eai.tableowner`, `eai.systemmode`, `theme.color`
### 로깅
- **SLF4J**와 **Logback** 구현 사용
- `LOGBACK_LOG_LEVEL` 시스템 프로퍼티를 통한 로그 레벨 제어
- 모든 `log4j` 의존성 제외 (build.gradle에 설정)
## IDE 설정
### Eclipse ### Eclipse
@@ -226,11 +282,11 @@ The application uses:
gradle eclipse gradle eclipse
``` ```
This generates: 다음을 생성합니다:
- `.project` and `.classpath` files - `.project` `.classpath` 파일
- Eclipse WTP configuration (context path: `/monitoring`) - Eclipse WTP 설정 (context path: `/monitoring`)
- UTF-8 encoding settings - UTF-8 인코딩 설정
- Annotation processor configuration for QueryDSL/Lombok - QueryDSL/Lombok을 위한 애노테이션 프로세서 설정
### IntelliJ IDEA ### IntelliJ IDEA
@@ -238,14 +294,61 @@ This generates:
gradle idea gradle idea
``` ```
Alternatively, use "Import Gradle Project" directly in IntelliJ. 또는 IntelliJ에서 직접 "Import Gradle Project"를 사용합니다.
## Testing ## 테스트
Tests use: 테스트에 사용되는 것들:
- **JUnit 5 (Jupiter)**: Test framework - **JUnit 5 (Jupiter)**: 테스트 프레임워크
- **Spring Boot Test 2.6.15**: Integration testing utilities - **Spring Boot Test 2.6.15**: 통합 테스트 유틸리티
- **H2 Database**: In-memory database for tests - **H2 Database**: 테스트용 인메모리 데이터베이스
- **Mockito**: Mocking framework (via Spring Boot Test) - **Mockito**: 모킹 프레임워크 (Spring Boot Test를 통해)
Test resources are in `src/test/resources` with H2-compatible configurations. 테스트 리소스는 H2 호환 설정과 함께 `src/test/resources`에 있습니다.
## KJB (광주은행) 전용 설정
### 프로퍼티 관리
KJB 전용 프로퍼티는 데이터베이스 테이블 `TSEAIRM24`에 그룹명 `'Monitoring'`으로 저장됩니다. `com.eactive.ext.kjb.common.KjbProperty`에서 관리하는 주요 프로퍼티:
**이메일 알림 (EAI Batch를 통해)**
- `kjb.eai_batch.url` - 이메일 발송을 위한 EAI 배치 서버 URL
- Dev: http://172.31.32.111:10230/BATAppWeb/EaiBatCall
- QA: http://172.31.33.111:10430/BATAppWeb/EaiBatCall
- Prod: http://172.21.1.40:10860/BATAppWeb/EaiBatCall
- `kjb.ums.eai_batch.send_dir` - 이메일 파일 발송 디렉토리 (기본값: `/Data/eapim/portal/sendmail/snd`)
- `kjb.ums.eai_batch.backup_dir` - 이메일 백업 디렉토리 (기본값: `/Data/eapim/portal/sendmail/bak`)
- `kjb.ums.eai_batch.interface_id` - 고객 이메일용 인터페이스 ID (예: `UAGFF00001UIE`)
**UMS (SMS/LMS/카카오톡) 연동**
- `kjb.ums.host_url` - UMS API 엔드포인트
- `kjb.ums.api_key` - UMS API 인증 키
- `kjb.ums.connection_timeout` - 연결 타임아웃 (초 단위)
- `kjb.ums.response_timeout` - 응답 타임아웃 (초 단위)
### 보안
- 커스텀 패스워드 인코더: SafeDB 연동을 위한 `KjbSafedbPasswordEncoder`
- SafeDB 없이 로컬 개발 시 `-Dkjb_safedb.mode=fake` 설정
## 데이터베이스 벤더 지원
애플리케이션은 벤더별 SQL 매핑 파일을 통해 여러 데이터베이스를 지원합니다:
- Oracle: `*-oracle.xml`
- MariaDB: `*-mariadb.xml`
- PostgreSQL: `*-postgresql.xml`
데이터베이스 벤더는 프로퍼티 파일의 `db.vendor``hibernate.dialect`를 통해 설정됩니다.
## WAR 배포
WAR 파일은 context path `/monitoring`으로 `eapim-admin.war`로 빌드됩니다.
**Weblogic 배포**: `weblogic-web.xml` 설정을 포함하려면 `-Pprofile=weblogic`를 사용합니다.
## 중요 사항
- **인코딩**: 시스템은 UTF-8을 사용합니다. CharacterEncodingFilter는 `*.excel` 패턴을 제외한 모든 요청에 UTF-8을 적용합니다.
- **XSS 보호**: CrossScriptingFilter가 `com.eactive.eai.rms.common.filter.CrossScriptingFilter`를 통해 모든 요청에 적용됩니다.
- **실시간 업데이트**: 모든 관리 변경사항은 DB와 메모리 모두에 즉시 반영됩니다.
- **인스턴스 이름**: 클러스터링을 위해 각 배포는 고유한 `inst.Name`을 가져야 합니다.
- **테이블 소유자**: Oracle 스키마 소유자는 `eai.tableowner` 프로퍼티를 통해 지정됩니다.
-41
View File
@@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- maxTotal: Maximum number of database connections in pool. Make sure you
configure your mysqld max_connections large enough to handle
all of your db connections. Set to -1 for no limit.
-->
<!-- maxIdle: Maximum number of idle database connections to retain in pool.
Set to -1 for no limit. See also the DBCP documentation on this
and the minEvictableIdleTimeMillis configuration parameter.
-->
<!-- maxWaitMillis: Maximum time to wait for a database connection to become available
in ms, in this example 10 seconds. An Exception is thrown if
this timeout is exceeded. Set to -1 to wait indefinitely.
-->
<!-- username and password: MySQL username and password for database connections -->
<!-- driverClassName: Class name for the old mm.mysql JDBC driver is
org.gjt.mm.mysql.Driver - we recommend using Connector/J though.
Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver.
-->
<!-- url: The JDBC connection url for connecting to your MySQL database.
-->
<Resource name="jdbc/dsOBP_AGW" auth="Container" type="javax.sql.DataSource"
maxTotal="10" maxIdle="10" maxWaitMillis="10000"
username="AGWAPP" password="AGWAPP123!" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@192.168.240.177:1599:DAPM"/>
<Resource name="jdbc/dsOBP_BAP" auth="Container" type="javax.sql.DataSource"
maxTotal="10" maxIdle="10" maxWaitMillis="10000"
username="BAPAPP" password="BAPAPP123!" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@192.168.240.177:1599:DAPM"/>
<Resource name="jdbc/dsOBP_EMS" auth="Container" type="javax.sql.DataSource"
maxTotal="10" maxIdle="10" maxWaitMillis="10000"
username="EMSAPP" password="EMSAPP123!" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@192.168.240.177:1599:DAPM"/>
</Context>
+8 -14
View File
@@ -2,14 +2,11 @@
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>jdbc/dsOBP_EMS</jta-data-source> <jta-data-source>jdbc/dsOBP_EMS</jta-data-source>
<properties> <properties>
<property name="hibernate.dialect" <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect" />
value="org.hibernate.dialect.Oracle12cDialect" /> <property name="javax.persistence.validation.mode" value="NONE" />
<property name="javax.persistence.validation.mode" <property name="eclipselink.weaving.validation" value="false" />
value="NONE" />
<property name="eclipselink.weaving.validation" value="false" />
</properties> </properties>
<class>com.eactive.eai.rms.data.entity.onl.bzwkdstcd.UserBusiness <class>com.eactive.eai.rms.data.entity.onl.bzwkdstcd.UserBusiness</class>
</class>
<class>com.eactive.eai.data.entity.onl.unifbwk.UnifBwkTp</class> <class>com.eactive.eai.data.entity.onl.unifbwk.UnifBwkTp</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes> <exclude-unlisted-classes>false</exclude-unlisted-classes>
</persistence-unit> </persistence-unit>
@@ -17,14 +14,11 @@
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>jdbc/dsOBP_EMS</jta-data-source> <jta-data-source>jdbc/dsOBP_EMS</jta-data-source>
<properties> <properties>
<property name="hibernate.dialect" <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect" />
value="org.hibernate.dialect.Oracle12cDialect" /> <property name="javax.persistence.validation.mode" value="NONE" />
<property name="javax.persistence.validation.mode" <property name="eclipselink.weaving.validation" value="false" />
value="NONE" />
<property name="eclipselink.weaving.validation" value="false" />
</properties> </properties>
<class>com.eactive.eai.rms.data.entity.onl.bzwkdstcd.UserBusiness <class>com.eactive.eai.rms.data.entity.onl.bzwkdstcd.UserBusiness</class>
</class>
<class>com.eactive.eai.data.entity.onl.unifbwk.UnifBwkTp</class> <class>com.eactive.eai.data.entity.onl.unifbwk.UnifBwkTp</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes> <exclude-unlisted-classes>false</exclude-unlisted-classes>
</persistence-unit> </persistence-unit>
+7 -15
View File
@@ -41,9 +41,7 @@
</context:component-scan> </context:component-scan>
<!-- elink-common 적용 후 추가 --> <!-- elink-common 적용 후 추가 -->
<context:component-scan <context:component-scan base-package="com.eactive.eai.adapter.loader" />
base-package="com.eactive.eai.adapter.loader">
</context:component-scan>
<context:component-scan base-package="com.eactive.eai.common.b2badaptermapping.loader"/> <context:component-scan base-package="com.eactive.eai.common.b2badaptermapping.loader"/>
<context:component-scan base-package="com.eactive.eai.common.b2bextractor.loader"/> <context:component-scan base-package="com.eactive.eai.common.b2bextractor.loader"/>
<context:component-scan base-package="com.eactive.eai.common.b2bservice.loader"/> <context:component-scan base-package="com.eactive.eai.common.b2bservice.loader"/>
@@ -66,15 +64,10 @@
<context:component-scan base-package="com.eactive.eai.common.sysdomain.loader"/> <context:component-scan base-package="com.eactive.eai.common.sysdomain.loader"/>
<context:component-scan base-package="com.eactive.eai.common.unifbwk.loader"/> <context:component-scan base-package="com.eactive.eai.common.unifbwk.loader"/>
<context:component-scan base-package="com.eactive.eai.common.usedate.loader"/> <context:component-scan base-package="com.eactive.eai.common.usedate.loader"/>
<context:component-scan <context:component-scan base-package="com.eactive.eai.flowcontrol.jms.loader" />
base-package="com.eactive.eai.flowcontrol.jms.loader"> <context:component-scan base-package="com.eactive.eai.inbound.error.loader" />
</context:component-scan> <context:component-scan base-package="com.eactive.apim.portal" />
<context:component-scan
base-package="com.eactive.eai.inbound.error.loader">
</context:component-scan>
<context:component-scan
base-package="com.eactive.apim.portal">
</context:component-scan>
<bean id="cacheManager" <bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheCacheManager"> class="org.springframework.cache.ehcache.EhCacheCacheManager">
@@ -92,10 +85,9 @@
<!-- schema 를 설정 하지 않으면 RoutingDataSource에 의해 각 설정에 맞는 DB에 접근 한다. --> <!-- schema 를 설정 하지 않으면 RoutingDataSource에 의해 각 설정에 맞는 DB에 접근 한다. -->
<prop key="hibernate.hbm2ddl.auto">none</prop> <prop key="hibernate.hbm2ddl.auto">none</prop>
<prop key="hibernate.format_sql">true</prop> <prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.show_sql">true</prop> <prop key="hibernate.show_sql">false</prop> <!-- true 할경우 STDOUT 출력이 강제됨 -->
<prop key="hibernate.type">trace</prop> <prop key="hibernate.type">trace</prop>
<prop key="hibernate.dialect">${hibernate.dialect:org.hibernate.dialect.Oracle12cDialect} <prop key="hibernate.dialect">${hibernate.dialect:org.hibernate.dialect.Oracle12cDialect}</prop>
</prop>
<prop key="hibernate.jdbc.batch_size">100</prop> <prop key="hibernate.jdbc.batch_size">100</prop>
<prop key="hibernate.jdbc.fetch_size">100</prop> <prop key="hibernate.jdbc.fetch_size">100</prop>
+4 -2
View File
@@ -52,8 +52,10 @@
</bean> </bean>
<!-- <bean id="passwordEncoder"--> <!-- <bean id="passwordEncoder"-->
<!-- class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />--> <!-- class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />-->
<bean id="passwordEncoder" <bean id="passwordEncoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder" />
class="org.springframework.security.crypto.password.StandardPasswordEncoder" />
<!-- 광주은행 전용 PasswordEncoder -->
<bean id="kjbSafedbPasswordEncoder" class="com.eactive.ext.kjb.spring.KjbSafedbPasswordEncoder" />
<import resource="applicationContext-datasource-${eai.datasource.type}.xml"/> <import resource="applicationContext-datasource-${eai.datasource.type}.xml"/>
<import resource="applicationContext-jdbc-${eai.datasource.type}.xml"/> <import resource="applicationContext-jdbc-${eai.datasource.type}.xml"/>
+1 -1
View File
@@ -1,6 +1,6 @@
UserManController_사용자관리_APIGW_INSERT,UPDATE,DELETE UserManController_사용자관리_APIGW_INSERT,UPDATE,DELETE
AdapterController_어댑터관리_APIGW_INSERT,UPDATE,DELETE AdapterController_어댑터관리_APIGW_INSERT,UPDATE,DELETE
ApiInterfaceController_API관리_APIGW_INSERT,UPDATE,DELETE ApiInterfaceController_API관리_APIGW_INSERT,UPDATE,DELETE,CLONE
ClientController_Client (키정보)관리_APIGW_INSERT,UPDATE,DELETE ClientController_Client (키정보)관리_APIGW_INSERT,UPDATE,DELETE
RoleController_Role (역할)관리_APIGW_INSERT,UPDATE,DELETE RoleController_Role (역할)관리_APIGW_INSERT,UPDATE,DELETE
MenuController_Menu관리_APIGW_INSERT,UPDATE,DELETE MenuController_Menu관리_APIGW_INSERT,UPDATE,DELETE
@@ -14,5 +14,5 @@ eai.tableowner=EMSADM
# P/T/D/S # P/T/D/S
eai.systemmode=P eai.systemmode=P
eai.drmode=N eai.drmode=N
# black / blue / green / orange / yellow # black / blue / green / orange / yellow
theme.color=blue theme.color=blue
@@ -115,7 +115,7 @@
resource="com/eactive/eai/rms/bap/manage/message/MessageMetaMan-oracle.xml" /> resource="com/eactive/eai/rms/bap/manage/message/MessageMetaMan-oracle.xml" />
<sqlMap <sqlMap
resource="com/eactive/eai/rms/bap/manage/common/Combo-mariadb.xml" /> resource="com/eactive/eai/rms/bap/manage/common/Combo-oracle.xml" />
<sqlMap <sqlMap
resource="com/eactive/eai/rms/bap/manage/work/BizGbnMan.xml" /> resource="com/eactive/eai/rms/bap/manage/work/BizGbnMan.xml" />
<sqlMap <sqlMap
+5 -13
View File
@@ -51,6 +51,11 @@
<filter-name>encodingFilter</filter-name> <filter-name>encodingFilter</filter-name>
<url-pattern>*.file</url-pattern> <url-pattern>*.file</url-pattern>
</filter-mapping> </filter-mapping>
<!-- Tomcat 에서는 필요. Weblogic 에서는 불필요함 -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.json</url-pattern>
</filter-mapping>
<!-- <!--
<filter> <filter>
@@ -68,19 +73,6 @@
org.springframework.web.context.ContextLoaderListener org.springframework.web.context.ContextLoaderListener
</listener-class> </listener-class>
</listener> </listener>
<!-- Weblogic 14.1.2 서블릿 설정 -->
<!--
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>weblogic.servlet.FileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
-->
<servlet> <servlet>
<servlet-name>springapp</servlet-name> <servlet-name>springapp</servlet-name>
<servlet-class> <servlet-class>
+9
View File
@@ -0,0 +1,9 @@
<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %>
<%
java.util.Enumeration<String> names = request.getHeaderNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
out.println(name + ": " + request.getHeader(name));
}
%>
request.getScheme(): <%=request.getScheme()%>
+71
View File
@@ -0,0 +1,71 @@
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String systemColor = System.getProperty("theme.color");
String range = (String)request.getParameter("range");
String color = (String)request.getParameter("color");
String change = (String)request.getParameter("change");
if(color == null || color.length() == 0) color= systemColor;
if("all".equals(range)) {
System.setProperty("theme.color", color);
}
%>
<c:set var="themeColor" value="<%= color %>" scope="session" />
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-control" CONTENT="no-cache">
<title>Change Theme Color</title>
<link rel="stylesheet" type="text/css" media="screen" href="<c:url value="/css/web_ui.css"/>"/>
<link rel="stylesheet" type="text/css" media="screen" href="<c:url value="/css/theme_${themeColor}.css"/>" />
<script language="javascript" src="<c:url value="/js/jquery-1.12.1.min.js"/>"></script>
<script language="javascript" src="<c:url value="/js/prefixfree.min.js"/>"></script>
<script language="JavaScript">
<% if( "change".equals(change) ) { %>
// window.opener.location.reload();
alert("color changed !");
<% } %>
</script>
</head>
<body>
<table width="100%" height="100%" >
<tr>
<td valign="middle" width="100%">
<form name="form" action="<c:url value="/color.jsp"/>" method="get">
<table width="200px" align="center" cellspacing="0" border="0" cellpadding="0">
<tr>
<td>Theme Color</td>
<td align="center" valign="middle" height="25px">
<select name="color">
<option value="black" <%= "black".equals(color)?"selected":"" %> >black</option>
<option value="blue" <%= "blue".equals(color)?"selected":"" %> >blue</option>
<option value="green" <%= "green".equals(color)?"selected":"" %> >green</option>
<option value="orange" <%= "orange".equals(color)?"selected":"" %> >orange</option>
<option value="yellow" <%= "yellow".equals(color)?"selected":"" %> >yellow</option>
</select>
</td>
</tr>
<tr>
<td>Range</td>
<td align="center" valign="middle" height="25px">
<select name="range">
<option value="current" <%= "current".equals(range)?"selected":"" %> >current</option>
<option value="all" <%= "all".equals(range)?"selected":"" %> >all</option>
</select>
</td>
</tr>
<tr><td colspan="2" ><hr width="200"/></td>
</tr>
<tr>
<td colspan="2" align="center" height="25px">
<input type="submit" name="change" value="change">
</td>
</tr>
</table>
</form>
</td></tr></table>
</body>
</html>
+1 -1
View File
@@ -35,7 +35,7 @@
<tr> <tr>
<td> <td>
<div align="center"><a href="#" onClick="history.back()"><img <div align="center"><a href="#" onClick="history.back()"><img
src="/monitoring/common/images/btn6_previous.gif" src="/monitoring/common/image/btn6_previous.gif"
width="79" height="22" border="0"></a></div> width="79" height="22" border="0"></a></div>
</td> </td>
</tr> </tr>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -75,6 +75,7 @@ $(document).ready(function() {
{ name : 'status' , align:'center'}, { name : 'status' , align:'center'},
{ name : 'stop' , align:'center'} { name : 'stop' , align:'center'}
], ],
autowidth: true,
autoheight: true, autoheight: true,
height: $("#container").height(), height: $("#container").height(),
//height: "500", //height: "500",
@@ -133,7 +134,7 @@ $(document).ready(function() {
</div><!-- end content_top --> </div><!-- end content_top -->
<div class="content_middle" id="content_middle"> <div class="content_middle" id="content_middle">
<div class="search_wrap"> <div class="search_wrap">
<img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R"/> <%-- <img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R"/> --%>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
</div> </div>
<div class="title">연결된 세션정보</div> <div class="title">연결된 세션정보</div>
@@ -21,7 +21,8 @@ $(document).ready(function() {
mtype: 'POST', mtype: 'POST',
url: '<c:url value="/bap/adapter/socket/instStatus.json" />', url: '<c:url value="/bap/adapter/socket/instStatus.json" />',
postData : { cmd : 'LIST' }, postData : { cmd : 'LIST' },
colNames:['업무구분', colNames:[
'업무구분',
'대외기관', '대외기관',
'IP', 'IP',
'PORT', 'PORT',
@@ -53,7 +54,7 @@ $(document).ready(function() {
} }
} }
}, },
{ name : 'serverCheck' , align:'center' , { name : 'serverCheck' , align:'center' , hidden: true,
formatter: function (cellValue, options, rowObject) { formatter: function (cellValue, options, rowObject) {
var ip = rowObject.LNKGIPINFONAME; var ip = rowObject.LNKGIPINFONAME;
var port = rowObject.LNKGPORTINFONAME; var port = rowObject.LNKGPORTINFONAME;
@@ -67,8 +68,9 @@ $(document).ready(function() {
return be; return be;
} }
}, },
{ name : 'serverConnected', align: 'center' } { name : 'serverConnected', align: 'center', hidden: true }
], ],
autowidth: true,
autoheight: true, autoheight: true,
height: $("#container").height(), height: $("#container").height(),
//height: "500", //height: "500",
@@ -151,8 +153,8 @@ function serverCheck(rowId) {
</div><!-- end content_top --> </div><!-- end content_top -->
<div class="content_middle" id="content_middle"> <div class="content_middle" id="content_middle">
<div class="search_wrap"> <div class="search_wrap">
<img src="<c:url value="/img/btn_operate.png"/>" id="btn_operate" level="R"/> <%-- <img src="<c:url value="/img/btn_operate.png"/>" id="btn_operate" level="R"/> --%>
<img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R"/> <%-- <img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R"/> --%>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
</div> </div>
<div class="title">비연결유지형 클라이언트 소켓 상태정보</div> <div class="title">비연결유지형 클라이언트 소켓 상태정보</div>
@@ -93,6 +93,7 @@ $(document).ready(function() {
{ name : 'status2' , align:'center', width:70}, { name : 'status2' , align:'center', width:70},
{ name : 'startStop' , align:'center'} { name : 'startStop' , align:'center'}
], ],
autowidth: true,
autoheight: true, autoheight: true,
height: $("#container").height(), height: $("#container").height(),
//height: "500", //height: "500",
@@ -166,7 +167,7 @@ $(document).ready(function() {
</div><!-- end content_top --> </div><!-- end content_top -->
<div class="content_middle" id="content_middle"> <div class="content_middle" id="content_middle">
<div class="search_wrap"> <div class="search_wrap">
<img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R"/> <%-- <img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R"/> --%>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
</div> </div>
<div class="title">연결유지형 소켓 상태정보</div> <div class="title">연결유지형 소켓 상태정보</div>
+7 -196
View File
@@ -25,17 +25,17 @@ var svrType = '';
$(document).ready(function() { $(document).ready(function() {
var url = '<c:url value="/bap/admin/adapter/adapterMan.json" />'; var url = '<c:url value="/bap/admin/adapter/adapterMan.json" />';
var url_view = '<c:url value="/bap/admin/adapter/adapterMan.view" />'; var url_view = '<c:url value="/bap/admin/adapter/adapterMan.view" />';
var gridPostData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로 var gridPostData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로
if(devSvr) { /* if(devSvr) {
svrType = "stg"; svrType = "stg";
} else if (stgSvr){ } else if (stgSvr){
svrType = "prod"; svrType = "prod";
} else if (!prdSvr){ } else if (!prdSvr){
svrType = "dev"; svrType = "dev";
} }*/
$('#grid').jqGrid({ $('#grid').jqGrid({
datatype:"json", datatype:"json",
@@ -68,8 +68,8 @@ $(document).ready(function() {
height: $("#container").height(), height: $("#container").height(),
autowidth: true, autowidth: true,
viewrecords: true, viewrecords: true,
multiselect: true, /* multiselect: true,
multiboxonly: false, multiboxonly: false, */
rowList : eval('[${rmsDefaultRowList}]'), rowList : eval('[${rmsDefaultRowList}]'),
gridComplete:function (d){ gridComplete:function (d){
var colModel = $(this).getGridParam("colModel"); var colModel = $(this).getGridParam("colModel");
@@ -117,197 +117,8 @@ $(document).ready(function() {
$("#btn_search").click(); $("#btn_search").click();
} }
}); });
$("#btn_delete").click(function() {
var id = "grid";
var data = new Array();
var ids = $("#grid").jqGrid('getDataIDs');
var chkcnt = 0;
for(var i=0;i<ids.length;i++){
if($("input:checkbox[id='jqg_"+id+"_"+ids[i]+"']").is(":checked")){
data.push($("#grid").getRowData(ids[i]));
chkcnt++;
}
}
if(chkcnt == 0){
alert("삭제 대상을 선택해 주세요");
return false;
}
if ( confirm( "삭제하시겠습니까?" ) != true ) return;
var adptrBzwkGroupNameList = [];
for (var i = 0; i <data.length; i++) {
adptrBzwkGroupNameList.push(data[i]["ADPTRBZWKGROUPNAME"].trim());
}
var postData = $('#ajaxForm').serializeArray();
postData.push({
name : "cmd",
value : "LIST_DELETE"
});
postData.push({
name : "adptrBzwkGroupNameList",
value : adptrBzwkGroupNameList
});
$.ajax({
type : "POST",
url : url,
data : postData,
success : function(args) {
alert(data.length+"건의 어댑터가 삭제 되었습니다.");
$("#btn_search").click();
},
error : function(e) {
alert(e.responseText);
}
});
});
$("#btn_download_sql").click(function() {
var id = "grid";
var data = new Array();
var ids = $("#grid").jqGrid('getDataIDs');
var chkcnt = 0;
for(var i=0;i<ids.length;i++){
if($("input:checkbox[id='jqg_"+id+"_"+ids[i]+"']").is(":checked")){
data.push($("#grid").getRowData(ids[i]));
chkcnt++;
}
}
if(chkcnt == 0){
alert("입력쿼리 다운로드 대상을 선택해 주세요");
return false;
}
if ( confirm( "입력쿼리를 다운로드하시겠습니까?" ) != true ) return;
var adptrBzwkGroupNameList = [];
for (var i = 0; i <data.length; i++) {
adptrBzwkGroupNameList.push(data[i]["ADPTRBZWKGROUPNAME"].trim());
}
var postData = $('#ajaxForm').serializeArray();
var sqlFileName = "BAP_ADPTR_INPUT_QUERY.sql";
postData.push({
name : "cmd",
value : "LIST_DOWNLOAD_SQL"
});
postData.push({
name : "adptrBzwkGroupNameList",
value : adptrBzwkGroupNameList
});
postData.push({
name : "fileName",
value : sqlFileName
});
$.ajax({
type : "POST",
url : url,
data : postData,
success : function(args) {
var filePath = args.path;
var url2 = url_view + "?cmd=LIST_FILE_DOWNLOAD";
url2 = url2 + '&returnUrl='+getReturnUrl();
url2 = url2 + '&menuId='+'${param.menuId}';
url2 = url2 + '&filePath='+filePath;
url2 = url2 + '&fileName='+sqlFileName;
goNav(url2);
alert(data.length+"건의 어댑터 입력 SQL문이 다운로드되었습니다.")
},
error : function(e) {
alert(e.responseText);
}
});
});
$("img[id=btn_clone_"+svrType+"]").click(function() {
var id = "grid";
var data = new Array();
var ids = $("#grid").jqGrid('getDataIDs');
var chkcnt = 0;
for(var i=0;i<ids.length;i++){
if($("input:checkbox[id='jqg_"+id+"_"+ids[i]+"']").is(":checked")){
data.push($("#grid").getRowData(ids[i]));
chkcnt++;
}
}
if(chkcnt == 0){
alert("복사 대상을 선택해 주세요");
return false;
}
if ( confirm( "복사하시겠습니까?" ) != true ) return;
var adptrBzwkGroupNameList = [];
for (var i = 0; i <data.length; i++) {
adptrBzwkGroupNameList.push(data[i]["ADPTRBZWKGROUPNAME"].trim());
}
var postData = $('#ajaxForm').serializeArray();
postData.push({
name : "cmd",
value : "LIST_DOWNLOAD_SQL"
});
postData.push({
name : "adptrBzwkGroupNameList",
value : adptrBzwkGroupNameList
});
postData.push({
name : "svrType",
value : svrType
});
$.ajax({
type : "POST",
url : url,
data : postData,
success : function(args) {
if (args.result != "" && args.error == "") {
alert("어댑터 "+data.length+"건이 정상 복사되었습니다.");
} else if (args.error != "") {
if ("${fn:contains(args.error,'SqlIntegrityConstraintViolationException')}") {
alert("일부 어댑터가 이미 존재하여 정상 복사되지 않었습니다.");
} else {
alert("오류가 발생하여 정상 반영되지 않았습니다. 오류 : "+args.error);
}
}
},
error : function(e) {
alert(e.responseText);
}
});
});
buttonControl(); buttonControl();
if(devSvr) {
setBtnHide(roleString, " ", "btn_clone_dev");
setBtnHide(roleString, " ", "btn_clone_prod");
setBtnHide(roleString, "admin", "btn_clone_stg");
} else if (stgSvr){
setBtnHide(roleString, " ", "btn_clone_dev");
setBtnHide(roleString, " ", "btn_clone_stg");
setBtnHide(roleString, "admin", "btn_clone_prod");
} else if (prdSvr){
setBtnHide(roleString, " ", "btn_clone_stg");
setBtnHide(roleString, " ", "btn_clone_prod");
setBtnHide(roleString, " ", "btn_clone_dev");
} else {
setBtnHide(roleString, " ", "btn_clone_stg");
setBtnHide(roleString, " ", "btn_clone_prod");
setBtnHide(roleString, "admin", "btn_clone_dev");
}
}); });
</script> </script>
@@ -325,7 +136,7 @@ $(document).ready(function() {
<!-- <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" /> --> <!-- <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" /> -->
<!-- <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" /> --> <!-- <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" /> -->
<img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" /> <img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" />
<img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" /> <%-- <img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" /> --%>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
</div> </div>
<div class="title">어댑터 관리<span class="tooltip">일괄전송에서 사용하는 어댑터 목록(Server/Non-permanent Client)</span></div> <div class="title">어댑터 관리<span class="tooltip">일괄전송에서 사용하는 어댑터 목록(Server/Non-permanent Client)</span></div>
@@ -486,7 +486,7 @@
/* 231102 김기영 이전기능 관련 숨김 처리 */ /* 231102 김기영 이전기능 관련 숨김 처리 */
setBtnHide(roleString, " ", "btn_clone_stg"); setBtnHide(roleString, " ", "btn_clone_stg");
setBtnHide(roleString, " ", "btn_clone_prod"); setBtnHide(roleString, " ", "btn_clone_prod");
setBtnHide(roleString, " ", "btn_clone_dev"); setBtnHide(roleString, " ", "btn_clone_dev");
}); });
</script> </script>
@@ -500,9 +500,9 @@
</div><!-- end content_top --> </div><!-- end content_top -->
<div class="content_middle" id="content_middle"> <div class="content_middle" id="content_middle">
<div class="search_wrap"> <div class="search_wrap">
<img src="<c:url value="/img/btn_clone.png"/>" alt="" id="btn_clone_stg" level="W" status="DETAIL"/> <%-- <img src="<c:url value="/img/btn_clone.png"/>" alt="" id="btn_clone_stg" level="W" status="DETAIL"/>
<img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" status="DETAIL"/> <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" status="DETAIL"/>
<img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" status="DETAIL"/> <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" status="DETAIL"/> --%>
<img src="<c:url value="/img/btn_modify.png"/>" alt="" id="btn_modify" level="W" status="DETAIL,NEW" /> <img src="<c:url value="/img/btn_modify.png"/>" alt="" id="btn_modify" level="W" status="DETAIL,NEW" />
<img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" status="DETAIL"/> <img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" status="DETAIL"/>
<img src="<c:url value="/img/btn_previous.png"/>" alt="" id="btn_previous" level="R" status="DETAIL,NEW"/> <img src="<c:url value="/img/btn_previous.png"/>" alt="" id="btn_previous" level="R" status="DETAIL,NEW"/>
@@ -533,6 +533,15 @@
</tr> </tr>
<tr> <tr>
<th>어댑터 사용 구분</th> <th>어댑터 사용 구분</th>
<td >
<div class="select-style">
<select name="adptrUseYn" style="width:100%" >
<option value="1">사용</option>
<option value="0">사용안함</option>
</select>
</div>
</td>
<!-- <th>어댑터 사용 구분</th>
<td style="width:38%;"> <td style="width:38%;">
<div class="select-style"> <div class="select-style">
<select name="adptrUseYn" style="width:100%" > <select name="adptrUseYn" style="width:100%" >
@@ -548,7 +557,7 @@
<option value="1">사용함</option> <option value="1">사용함</option>
<option value="0">사용안함</option> <option value="0">사용안함</option>
</select> </select>
</td> </td> -->
</tr> </tr>
<tr id="clone" hidden="hidden"> <tr id="clone" hidden="hidden">
<th>복제 어댑터 그룹명</th> <th>복제 어댑터 그룹명</th>
@@ -129,10 +129,10 @@ $(document).ready(function() {
</div> </div>
<div class="title">오류메시지 관리<span class="tooltip">표준화된 IF시스템 에러 응답코드를 조회합니다. 메시지 키 및 내용으로 그에 해당하는 오류메시지를 조회할 수 있습니다.</span></div> <div class="title">오류메시지 관리<span class="tooltip">표준화된 IF시스템 에러 응답코드를 조회합니다. 메시지 키 및 내용으로 그에 해당하는 오류메시지를 조회할 수 있습니다.</span></div>
<div class="select-style" style="display : inline-block;"> <div class="select-style" style="display : inline-block;">
<select id="svrDst" name="searchSvrDstcd" style="width: 60px ; height: 25px; margin: 0px 0px 4px 0px;"> <!-- <select id="svrDst" name="searchSvrDstcd" style="width: 60px ; height: 25px; margin: 0px 0px 4px 0px;">
<option value="BAP">&nbsp;&nbsp;일괄</option> <option value="BAP">&nbsp;&nbsp;일괄</option>
<!-- <option value="BAT">&nbsp;&nbsp;배치</option> --> <option value="BAT">&nbsp;&nbsp;배치</option>
</select> </select> -->
</div> </div>
<table class="search_condition" cellspacing=0;> <table class="search_condition" cellspacing=0;>
<tbody> <tbody>
@@ -133,10 +133,10 @@ $(document).ready(function() {
<form id="ajaxForm"> <form id="ajaxForm">
<table class="table_row" cellspacing="0"> <table class="table_row" cellspacing="0">
<tr> <!-- <tr>
<th style="width:20%;">서버구분</th> <th style="width:20%;">서버구분</th>
<td><input type="text" name="svrName" readonly/></td> <td><input type="text" name="svrName" readonly/></td>
</tr> </tr> -->
<tr> <tr>
<th style="width:20%;">오류메시지 코드 *</th> <th style="width:20%;">오류메시지 코드 *</th>
<td><input type="text" name="msg"/> </td> <td><input type="text" name="msg"/> </td>
@@ -127,10 +127,10 @@ $(document).ready(function() {
</div> </div>
<div class="title">라이프사이클 관리<span class="tooltip">시스템 기동 시 로딩 되는 라이프사이클 클래스를 조회합니다.</span></div> <div class="title">라이프사이클 관리<span class="tooltip">시스템 기동 시 로딩 되는 라이프사이클 클래스를 조회합니다.</span></div>
<div class="select-style" style="display : inline-block;"> <div class="select-style" style="display : inline-block;">
<select id="svrDst" name="searchSvrDstcd" style="width: 60px ; height: 25px; margin: 0px 0px 4px 0px;"> <!-- <select id="svrDst" name="searchSvrDstcd" style="width: 60px ; height: 25px; margin: 0px 0px 4px 0px;">
<option value="BAP">&nbsp;&nbsp;일괄</option> <option value="BAP">&nbsp;&nbsp;일괄</option>
<!-- <option value="BAT">&nbsp;&nbsp;배치</option> --> <option value="BAT">&nbsp;&nbsp;배치</option>
</select> </select> -->
</div> </div>
<table id="grid" ></table> <table id="grid" ></table>
<div id="pager"></div> <div id="pager"></div>
@@ -135,10 +135,10 @@ $(document).ready(function() {
<form id="ajaxForm"> <form id="ajaxForm">
<table class="table_row" cellspacing="0"> <table class="table_row" cellspacing="0">
<tr> <!-- <tr>
<th style="width:20%;">서버구분</th> <th style="width:20%;">서버구분</th>
<td><input type="text" name="svrName" readonly/></td> <td><input type="text" name="svrName" readonly/></td>
</tr> </tr> -->
<tr> <tr>
<th style="width:20%;">라이프사이클 클래스명 *</th> <th style="width:20%;">라이프사이클 클래스명 *</th>
<td><input type="text" name="lifeCyclClsName"/> </td> <td><input type="text" name="lifeCyclClsName"/> </td>
@@ -132,10 +132,10 @@ $(document).ready(function() {
</div> </div>
<div class="title">프로퍼티 관리<span class="tooltip">각 Layer에서 필요한 프라퍼티 Key, Value를 하나의 그룹으로 등록하기 위한 그룹명</span></div> <div class="title">프로퍼티 관리<span class="tooltip">각 Layer에서 필요한 프라퍼티 Key, Value를 하나의 그룹으로 등록하기 위한 그룹명</span></div>
<div class="select-style" style="display : inline-block;"> <div class="select-style" style="display : inline-block;">
<select id="svrDst" name="searchSvrDstcd" style="width: 60px ; height: 25px; margin: 0px 0px 4px 0px;"> <!-- <select id="svrDst" name="searchSvrDstcd" style="width: 60px ; height: 25px; margin: 0px 0px 4px 0px;">
<option value="BAP">&nbsp;&nbsp;일괄</option> <option value="BAP">&nbsp;&nbsp;일괄</option>
<!-- <option value="BAT">&nbsp;&nbsp;배치</option> --> <option value="BAT">&nbsp;&nbsp;배치</option>
</select> </select> -->
</div> </div>
<table class="search_condition" cellspacing=0;> <table class="search_condition" cellspacing=0;>
<tbody> <tbody>
@@ -435,14 +435,14 @@
<form id="ajaxForm"> <form id="ajaxForm">
<table class="table_row" cellspacing="0"> <table class="table_row" cellspacing="0">
<tr> <!-- <tr>
<th style="width:20%;">서버구분</th> <th style="width:20%;">서버구분</th>
<td><input type="text" name="svrName" readonly/></td> <td><input type="text" name="svrName" readonly/></td>
</tr> </tr> -->
<tr> <tr>
<th style="width:20%;">프라퍼티 그룹명 *</th> <th style="width:20%;">프라퍼티 그룹명 *</th>
<td><input type="text" name="prptyGroupName" style="display:inline-block; width:calc(100% - 60px);"/> <td><input type="text" name="prptyGroupName" style="display:inline-block; width:calc(100% - 60px);"/>
<img id="btn_download_sql" src="<c:url value="/img/icon_download.png"/>" class="btn_img" level="W" status="DETAIL"/> <%-- <img id="btn_download_sql" src="<c:url value="/img/icon_download.png"/>" class="btn_img" level="W" status="DETAIL"/> --%>
</td> </td>
</tr> </tr>
<tr> <tr>
@@ -179,7 +179,7 @@ $(document).ready(function() {
<th style="width:20%;">IF서버인스턴스명</th><td><input type="text" name="eaiSevrInstncName"/> </td> <th style="width:20%;">IF서버인스턴스명</th><td><input type="text" name="eaiSevrInstncName"/> </td>
</tr> </tr>
<tr> <tr>
<th>마스터여부</th><td><div class="select-style"><select name="flovrSevrName"/></div></td> <th>장애극복서버명</th><td><div class="select-style"><select name="flovrSevrName"/></div></td>
</tr> </tr>
<tr> <tr>
<th>IF서버IP</th><td><input type="text" name="eaiSevrIp"/> </td> <th>IF서버IP</th><td><input type="text" name="eaiSevrIp"/> </td>
@@ -95,8 +95,8 @@ function getGridData() {
height: $("#container").height(), height: $("#container").height(),
autowidth: true, autowidth: true,
viewrecords: true, viewrecords: true,
multiselect: true, /* multiselect: true,
multiboxonly: false, multiboxonly: false, */
rowList : eval('[${rmsDefaultRowList}]'), rowList : eval('[${rmsDefaultRowList}]'),
gridComplete:function (d){ gridComplete:function (d){
var colModel = $(this).getGridParam("colModel"); var colModel = $(this).getGridParam("colModel");
@@ -136,7 +136,7 @@ function getGridData() {
var url = '<c:url value="/bap/admin/message/classInfoMan.view"/>'; var url = '<c:url value="/bap/admin/message/classInfoMan.view"/>';
url = url + '?cmd=DETAIL'; url = url + '?cmd=DETAIL';
url = url + '&page='+$("#grid").getGridParam("page"); url = url + '&page='+$("#grid").getGridParam("page");
url = url + '&returnUrl='+getSearchUrlForReturn(); url = url + '&returnUrl='+getReturnUrl();
url = url + '&menuId='+'${param.menuId}'; url = url + '&menuId='+'${param.menuId}';
//검색값 //검색값
url = url + '&'+getSearchUrl(); url = url + '&'+getSearchUrl();
@@ -385,7 +385,7 @@ function getGridData() {
<!-- <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" /> --> <!-- <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" /> -->
<!-- <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" /> --> <!-- <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" /> -->
<img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" /> <img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" />
<img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" /> <!-- <img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" /> -->
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
</div> </div>
<div class="title">클래스정보 관리<span class="tooltip">클래스정보를 등록/관리합니다</span></div> <div class="title">클래스정보 관리<span class="tooltip">클래스정보를 등록/관리합니다</span></div>
@@ -395,16 +395,23 @@ function getGridData() {
<tr> <tr>
<th style="width:150px;">전문클래스명</th> <th style="width:150px;">전문클래스명</th>
<td><input type="text" name="searchTelgmClsName" value="${param.searchTelgmClsName}"></td> <td><input type="text" name="searchTelgmClsName" value="${param.searchTelgmClsName}"></td>
<th style="width:150px;">전문클래스 설명</th> <%-- <th style="width:150px;">전문클래스 설명</th>
<td><input type="text" name="searchTelgmClsDesc" value="${param.searchTelgmClsDesc}"></td> <td><input type="text" name="searchTelgmClsDesc" value="${param.searchTelgmClsDesc}"></td> --%>
<th style="width:150px;">복제 사용여부</th> <!-- <th style="width:150px;">복제 사용여부</th>
<td> <td>
<div class="select-style"> <div class="select-style">
<select name="clonYn" id="clonYn" readonly="readonly" onchange="viewChange(this)"> <select name="clonYn" id="clonYn" readonly="readonly" onchange="viewChange(this)">
<option value="1">사용함</option> <option value="1">사용함</option>
<option value="0">사용안함</option> <option value="0">사용안함</option>
</select> </select>
</td> </td> --><!-- <th style="width:150px;">복제 사용여부</th>
<td>
<div class="select-style">
<select name="clonYn" id="clonYn" readonly="readonly" onchange="viewChange(this)">
<option value="1">사용함</option>
<option value="0">사용안함</option>
</select>
</td> -->
</tr> </tr>
<tr id="clone" hidden="hidden"> <tr id="clone" hidden="hidden">
<th style="width:150px;">복제 전문클래스명</th> <th style="width:150px;">복제 전문클래스명</th>
@@ -101,8 +101,8 @@ function getGridData() {
height: $("#container").height(), height: $("#container").height(),
autowidth: true, autowidth: true,
viewrecords: true, viewrecords: true,
multiselect: true, /* multiselect: true,
multiboxonly: false, multiboxonly: false, */
rowList : eval('[${rmsDefaultRowList}]'), rowList : eval('[${rmsDefaultRowList}]'),
gridComplete:function (d){ gridComplete:function (d){
var colModel = $(this).getGridParam("colModel"); var colModel = $(this).getGridParam("colModel");
@@ -406,7 +406,7 @@ function getGridData() {
<!-- <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" /> --> <!-- <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" /> -->
<!-- <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" /> --> <!-- <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" /> -->
<img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" /> <img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" />
<img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" /> <%-- <img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" /> --%>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
</div> </div>
<div class="title">클래스맵핑 관리<span class="tooltip">클래스정보를 등록/관리합니다</span></div> <div class="title">클래스맵핑 관리<span class="tooltip">클래스정보를 등록/관리합니다</span></div>
@@ -418,7 +418,7 @@ function getGridData() {
<td><input type="text" name="searchTelgmClsID" value="${param.searchTelgmClsID}"></td> <td><input type="text" name="searchTelgmClsID" value="${param.searchTelgmClsID}"></td>
<th style="width:150px;">메시지메타구분코드</th> <th style="width:150px;">메시지메타구분코드</th>
<td><input type="text" name="searchMsgMetaDstcd" value="${param.searchMsgMetaDstcd}"></td> <td><input type="text" name="searchMsgMetaDstcd" value="${param.searchMsgMetaDstcd}"></td>
<th style="width:150px;">전문클래스명</th> <!-- <th style="width:150px;">전문클래스명</th>
<td><input type="text" name="searchTelgmClsName" value="${param.searchTelgmClsName}"></td> <td><input type="text" name="searchTelgmClsName" value="${param.searchTelgmClsName}"></td>
<th style="width:150px;">복제 사용여부</th> <th style="width:150px;">복제 사용여부</th>
<td> <td>
@@ -427,7 +427,7 @@ function getGridData() {
<option value="1">사용함</option> <option value="1">사용함</option>
<option value="0">사용안함</option> <option value="0">사용안함</option>
</select> </select>
</td> </td> -->
</tr> </tr>
<tr id="clone" hidden="hidden"> <tr id="clone" hidden="hidden">
<th style="width:150px;">복제 전문클래스ID</th> <th style="width:150px;">복제 전문클래스ID</th>
@@ -155,7 +155,7 @@
{ name : 'MOVEUP' , align : 'center', sortable:false, width : '80', unformat : imgUpunformatter, formatter : imgUpformatter}, { name : 'MOVEUP' , align : 'center', sortable:false, width : '80', unformat : imgUpunformatter, formatter : imgUpformatter},
{ name : 'MOVEDOWN' , align : 'center', sortable:false, width : '80', unformat : imgDownunformatter, formatter : imgDownformatter}, { name : 'MOVEDOWN' , align : 'center', sortable:false, width : '80', unformat : imgDownunformatter, formatter : imgDownformatter},
{ name : 'DELETEYN' , align : 'center', sortable:false, width : '80', unformat : unformatterFunction, formatter : formatterFunction}, { name : 'DELETEYN' , align : 'center', sortable:false, width : '80', unformat : unformatterFunction, formatter : formatterFunction},
{ name : 'CLONE' , align : 'center', sortable:false, width : '80', unformat : cloneunformatter, formatter : cloneformatter} { name : 'CLONE' , align : 'center', sortable:false, width : '80', unformat : cloneunformatter, formatter : cloneformatter, hidden: true}
], ],
jsonReader : { jsonReader : {
repeatitems : false repeatitems : false
@@ -676,10 +676,10 @@
</div><!-- end content_top --> </div><!-- end content_top -->
<div class="content_middle" id="content_middle"> <div class="content_middle" id="content_middle">
<div class="search_wrap"> <div class="search_wrap">
<img src="<c:url value="/img/btn_clone.png"/>" alt="" id="btn_clone_stg" level="W" status="DETAIL"/> <%-- <img src="<c:url value="/img/btn_clone.png"/>" alt="" id="btn_clone_stg" level="W" status="DETAIL"/>
<img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" status="DETAIL"/> <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" status="DETAIL"/>
<img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" status="DETAIL"/> <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" status="DETAIL"/>
<img src="<c:url value="/img/btn_excel.png"/>" alt="" id="btn_excel" level="W" status="DETAIL"/> <img src="<c:url value="/img/btn_excel.png"/>" alt="" id="btn_excel" level="W" status="DETAIL"/> --%>
<img src="<c:url value="/img/btn_modify.png"/>" alt="" id="btn_modify" level="W" status="DETAIL,NEW" /> <img src="<c:url value="/img/btn_modify.png"/>" alt="" id="btn_modify" level="W" status="DETAIL,NEW" />
<img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" status="DETAIL"/> <img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" status="DETAIL"/>
<img src="<c:url value="/img/btn_previous.png"/>" alt="" id="btn_previous" level="R" status="DETAIL,NEW"/> <img src="<c:url value="/img/btn_previous.png"/>" alt="" id="btn_previous" level="R" status="DETAIL,NEW"/>
@@ -116,8 +116,8 @@ function cloneformatter(cellvalue, options, rowObject) {
{ name : 'BJOBFLOWCMPONAME' , align:'left' ,width:40 }, { name : 'BJOBFLOWCMPONAME' , align:'left' ,width:40 },
{ name : 'TELGMCLSID' , align:'left' ,width:40 }, { name : 'TELGMCLSID' , align:'left' ,width:40 },
{ name : 'UNITTELGMLEN' , align:'left' ,width:40 }, { name : 'UNITTELGMLEN' , align:'left' ,width:40 },
{ name : 'BJOBNODEDESC' , align:'left' ,width:40, hidden : false }, { name : 'BJOBNODEDESC' , align:'left' ,width:40, hidden : true },
{ name : 'CLONE' , align:'center',width:10, unformat:cloneunformatter, formatter:cloneformatter} { name : 'CLONE' , align:'center',width:10, unformat:cloneunformatter, formatter:cloneformatter, hidden: true }
], ],
jsonReader: { jsonReader: {
repeatitems:false repeatitems:false
@@ -129,8 +129,8 @@ function cloneformatter(cellvalue, options, rowObject) {
height: $("#container").height(), height: $("#container").height(),
autowidth: true, autowidth: true,
viewrecords: true, viewrecords: true,
multiselect: true, /* multiselect: true,
multiboxonly: false, multiboxonly: false, */
rowList : eval('[${rmsDefaultRowList}]'), rowList : eval('[${rmsDefaultRowList}]'),
loadComplete : function(rowId) { loadComplete : function(rowId) {
$("img[name^=img_clone]").click(function() { $("img[name^=img_clone]").click(function() {
@@ -478,7 +478,7 @@ function cloneformatter(cellvalue, options, rowObject) {
<!-- <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" /> --> <!-- <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" /> -->
<!-- <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" /> --> <!-- <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" /> -->
<img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" /> <img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" />
<img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" /> <%-- <img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" /> --%>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
</div> </div>
<div class="title">흐름단계 리스트<span class="tooltip">흐름단계 리스트를 관리합니다</span></div> <div class="title">흐름단계 리스트<span class="tooltip">흐름단계 리스트를 관리합니다</span></div>
@@ -490,9 +490,9 @@ function cloneformatter(cellvalue, options, rowObject) {
<td style="width:200px;"><input type="text" name="searchBjobBzwkPrcssDstcd" value="${param.searchBjobBzwkPrcssDstcd}"></td> <td style="width:200px;"><input type="text" name="searchBjobBzwkPrcssDstcd" value="${param.searchBjobBzwkPrcssDstcd}"></td>
<th style="width:120px;">단계구분코드</th> <th style="width:120px;">단계구분코드</th>
<td style="width:200px;"><input type="text" name="searchBjobStgeDstcd" value="${param.searchBjobStgeDstcd}"></td> <td style="width:200px;"><input type="text" name="searchBjobStgeDstcd" value="${param.searchBjobStgeDstcd}"></td>
<%-- <th style="width:120px;">흐름콤포넌트명</th> <th style="width:120px;">흐름콤포넌트명</th>
<td style="width:200px;"><input type="text" name="searchBjobFlowCmpoName" value="${param.searchBjobFlowCmpoName}"></td> --%> <td style="width:200px;"><input type="text" name="searchBjobFlowCmpoName" value="${param.searchBjobFlowCmpoName}"></td>
<th style="width:120px;">전문클래스ID</th> <%-- <th style="width:120px;">전문클래스ID</th>
<td style="width:200px;"><input type="text" name="searchTelgmClsID" value="${param.searchTelgmClsID}"></td> <td style="width:200px;"><input type="text" name="searchTelgmClsID" value="${param.searchTelgmClsID}"></td>
<th style="width:120px;">복제 사용여부</th> <th style="width:120px;">복제 사용여부</th>
<td style="width:200px;"> <td style="width:200px;">
@@ -501,7 +501,7 @@ function cloneformatter(cellvalue, options, rowObject) {
<option value="1">사용함</option> <option value="1">사용함</option>
<option value="0">사용안함</option> <option value="0">사용안함</option>
</select> </select>
</td> </td> --%>
</tr> </tr>
<tr id="clone" hidden="hidden"> <tr id="clone" hidden="hidden">
<th style="width:120px;">복제 업무처리구분코드</th> <th style="width:120px;">복제 업무처리구분코드</th>
@@ -57,13 +57,13 @@
{ name : 'MSGCLMNVAL' , align:'center' , width:40 }, { name : 'MSGCLMNVAL' , align:'center' , width:40 },
{ name : 'THISMSGCLMNUSEYN' , align:'center' , width:40 , { name : 'THISMSGCLMNUSEYN' , align:'center' , width:40 ,
formatter: function (cellvalue) { formatter: function (cellvalue) {
if ( !cellvalue ) { if ( cellvalue == '0' ) {
return '<span style="color:red">사용안함</span>'; return '<span style="color:red">사용안함</span>';
} else if ( cellvalue ) { } else if ( cellvalue == '1' ) {
return '사용'; return '사용';
} else { } else {
return cellvalue; return cellvalue;
} }
} }
} }
], ],
@@ -77,8 +77,8 @@
height: $("#container").height(), height: $("#container").height(),
autowidth: true, autowidth: true,
viewrecords: true, viewrecords: true,
multiselect: true, /* multiselect: true,
multiboxonly: false, multiboxonly: false, */
rowList : eval('[${rmsDefaultRowList}]'), rowList : eval('[${rmsDefaultRowList}]'),
gridComplete:function (d){ gridComplete:function (d){
var colModel = $(this).getGridParam("colModel"); var colModel = $(this).getGridParam("colModel");
@@ -396,7 +396,7 @@
<!-- <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" /> --> <!-- <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" /> -->
<!-- <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" /> --> <!-- <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" /> -->
<img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" /> <img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" />
<img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" /> <%-- <img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" /> --%>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
</div> </div>
@@ -406,12 +406,12 @@
<tbody> <tbody>
<tr> <tr>
<th style="width:150px;">메시지항목 구분명</th> <th style="width:150px;">메시지항목 구분명</th>
<td style="width:20%;"><input type="text" name="searchMsgItemDsticName" value="${param.searchMsgItemDsticName}"></td> <td><input type="text" name="searchMsgItemDsticName" value="${param.searchMsgItemDsticName}"></td>
<th>메시지 컬럼명</th> <th style="width:150px;">메시지 컬럼명</th>
<td><input type="text" name="searchMsgClmnName" value="${param.searchMsgClmnName}"></td> <td><input type="text" name="searchMsgClmnName" value="${param.searchMsgClmnName}"></td>
<th>복제 메시지항목 구분명</th> <%-- <th>복제 메시지항목 구분명</th>
<td><input type="text" name="cloneMsgItemDsticName" style="display:inline-block; width:calc(100% - 70px);"> <td><input type="text" name="cloneMsgItemDsticName" style="display:inline-block; width:calc(100% - 70px);">
<img id="btn_clone" src="<c:url value="/img/btn_clone1.png" />" level="W" status="LIST" class="btn_img"/></td> <img id="btn_clone" src="<c:url value="/img/btn_clone1.png" />" level="W" status="LIST" class="btn_img"/></td> --%>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@@ -109,8 +109,8 @@ function getGridData() {
height: $("#container").height(), height: $("#container").height(),
autowidth: true, autowidth: true,
viewrecords: true, viewrecords: true,
multiselect: true, /* multiselect: true,
multiboxonly: false, multiboxonly: false, */
rowList : eval('[${rmsDefaultRowList}]'), rowList : eval('[${rmsDefaultRowList}]'),
gridComplete:function (d){ gridComplete:function (d){
var colModel = $(this).getGridParam("colModel"); var colModel = $(this).getGridParam("colModel");
@@ -402,7 +402,7 @@ function getGridData() {
<!-- <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" /> --> <!-- <img src="<c:url value="/img/btn_clone_prod.png"/>" alt="" id="btn_clone_prod" level="W" /> -->
<!-- <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" /> --> <!-- <img src="<c:url value="/img/btn_clone_dev.png"/>" alt="" id="btn_clone_dev" level="W" /> -->
<img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" /> <img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" />
<img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" /> <%-- <img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" /> --%>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
</div> </div>
<div class="title">메시지메타 관리<span class="tooltip">메시지메타 정보를 등록 관리합니다</span></div> <div class="title">메시지메타 관리<span class="tooltip">메시지메타 정보를 등록 관리합니다</span></div>
@@ -415,14 +415,14 @@ function getGridData() {
<td><input type="text" name="searchMsgMetaDstcd" value="${param.searchMsgMetaDstcd}"></td> <td><input type="text" name="searchMsgMetaDstcd" value="${param.searchMsgMetaDstcd}"></td>
<th style="width:150px;">메시지 설명</th> <th style="width:150px;">메시지 설명</th>
<td><input type="text" name="searchMsgDesc" value="${param.searchMsgDesc}"></td> <td><input type="text" name="searchMsgDesc" value="${param.searchMsgDesc}"></td>
<th style="width:120px;">복제 사용여부</th> <!-- <th style="width:120px;">복제 사용여부</th>
<td style="width:120px;"> <td style="width:120px;">
<div class="select-style"> <div class="select-style">
<select name="clonYn" id="clonYn" readonly="readonly" onchange="viewChange(this)"> <select name="clonYn" id="clonYn" readonly="readonly" onchange="viewChange(this)">
<option value="1">사용함</option> <option value="1">사용함</option>
<option value="0">사용안함</option> <option value="0">사용안함</option>
</select> </select>
</td> </td> -->
</tr> </tr>
<tr id="clone" hidden="hidden"> <tr id="clone" hidden="hidden">
<th style="width:150px;">복제 메시지메타 구분코드</th> <th style="width:150px;">복제 메시지메타 구분코드</th>
@@ -71,9 +71,9 @@ function getGridData() {
colModel:[ colModel:[
{ name : 'MSGITEMDSTICNAME' , align:'left' ,width:40 ,sortable:false }, { name : 'MSGITEMDSTICNAME' , align:'left' ,width:40 ,sortable:false },
{ name : 'MSGCLMNNAME' , align:'center' ,width:40 }, { name : 'MSGCLMNNAME' , align:'center' ,width:40 },
{ name : 'MSGCLMNATTRIPTRNCD' , align:'center' ,width:30 }, { name : 'MSGCLMNATTRIPTRNCD' , align:'center' ,width:40 },
{ name : 'MSGCLMNVAL' , align:'center' ,width:30 }, { name : 'MSGCLMNVAL' , align:'center' ,width:40 },
{ name : 'THISMSGCLMNUSEYN' , align:'center' ,width:30 , { name : 'THISMSGCLMNUSEYN' , align:'center' ,width:40 ,
formatter: function (cellvalue) { formatter: function (cellvalue) {
if ( !cellvalue ) { if ( !cellvalue ) {
return '<span style="color:red">사용안함</span>'; return '<span style="color:red">사용안함</span>';
@@ -84,9 +84,9 @@ function getGridData() {
} }
} }
}, },
{ name : 'MSGITEMCLONENAME', align:'left', sortable:false, width:40, unformat:unformatterFunction, formatter:gridCloneName}, { name : 'MSGITEMCLONENAME', align:'left', sortable:false, width:40, unformat:unformatterFunction, formatter:gridCloneName, hidden:true },
{ name : 'MSGITEMCLONE' , align:'center', sortable:false, width:20, unformat:unformatterFunction, formatter:gridCloneFunction}, { name : 'MSGITEMCLONE' , align:'center', sortable:false, width:20, unformat:unformatterFunction, formatter:gridCloneFunction, hidden:true },
{ name : 'DELETEYN' , align:'center', sortable:false, width:20, unformat:unformatterFunction, formatter:formatterFunction} { name : 'DELETEYN' , align:'center', sortable:false, width:20, unformat:unformatterFunction, formatter:formatterFunction, hidden:true }
], ],
jsonReader: { jsonReader: {
repeatitems:false repeatitems:false
@@ -98,8 +98,8 @@ function getGridData() {
height: $("#container").height(), height: $("#container").height(),
autowidth: true, autowidth: true,
viewrecords: true, viewrecords: true,
multiselect: true, /* multiselect: true,
multiboxonly: false, multiboxonly: false, */
rowList : eval('[${rmsDefaultRowList}]'), rowList : eval('[${rmsDefaultRowList}]'),
gridComplete:function (d){ gridComplete:function (d){
var colModel = $(this).getGridParam("colModel"); var colModel = $(this).getGridParam("colModel");
@@ -224,8 +224,8 @@ function getGridData() {
<body> <body>
<div class="popup_box"> <div class="popup_box">
<div class="search_wrap"> <div class="search_wrap">
<img src="<c:url value="/img/btn_input.png"/>" alt="" id="btn_input" level="R" /> <%-- <img src="<c:url value="/img/btn_input.png"/>" alt="" id="btn_input" level="R" />
<img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" /> <img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" /> --%>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
<img src="<c:url value="/img/btn_close.png"/>" alt="" id="btn_close" level="R" /> <img src="<c:url value="/img/btn_close.png"/>" alt="" id="btn_close" level="R" />
</div> </div>
+94 -228
View File
@@ -13,261 +13,127 @@
<jsp:include page="/jsp/common/include/css.jsp"/> <jsp:include page="/jsp/common/include/css.jsp"/>
<jsp:include page="/jsp/common/include/script.jsp"/> <jsp:include page="/jsp/common/include/script.jsp"/>
<script language="javascript" > <script language="javascript" >
var url_excel = '<c:url value="/common/noauth/excel/listGridToExcel.json" />'; function list(url){
var gridPostData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로
function fileupload(e,successcallback,errorcallback) {
var formObj = $(this);
var formURL = formObj.attr("action");
if(window.FormData !== undefined) // for HTML5 browsers
{
var formData = new FormData(this);
$.ajax({
url: formURL,
type: 'POST',
data: formData,
encType: "multipart/form-data",
contentType: false,
cache: false,
processData: false,
success: function(json, textStatus, jqXHR) {
$("input[name=file]").val("");
if(textStatus == 'success') {
alert('정상처리 되었습니다.');
$("#btn_search").click();
} else {
alert('업로드중 에러가 발생하였습니다.');
}
},
error: function(jqXHR, textStatus, errorThrown) {
$("input[name=file]").val("");
if (typeof callback === 'function') {
errorcallback(jqXHR, textStatus, errorThrown);
}
}
});
e.preventDefault();
if (e.unbind) e.unbind();
} else { //for olden browsers
formObj.append($("<input type='hidden' name='serviceType' value='" + sessionStorage["serviceType"] + "' />"));
//generate a random id
var iframeId = 'unique' + (new Date().getTime());
//create an empty iframe
var iframe = $('<iframe src="javascript:false;" id="' + iframeId + '" name="' + iframeId + '" />');
//hide it
iframe.hide();
//set form target to iframe
formObj.attr('target', iframeId);
formObj.attr('action', '<c:url value="/loader.file" />');
//Add iframe to body
iframe.appendTo('body');
iframe.load(function(e) {
var doc = getDoc(iframe[0]);
var docRoot = doc.body ? doc.body : doc.documentElement;
var data = docRoot.innerHTML;
var k = JSON.parse(data);
$("#grid")[0].addJSONData(k);
$("input[name=file]").val("");
//data is returned from server.
if (typeof callback === 'function') {
//successcallback(data);
}
});
}
}
function list(url) {
var gridPostData = getSearchForJqgrid("cmd", "LIST"); //jqgrid에서는 object 로
$('#grid').jqGrid({ $('#grid').jqGrid({
datatype: "json", datatype:"json",
mtype: 'POST', mtype: 'POST',
url: '<c:url value="/bap/admin/work/bizGbnMan.json" />', url: '<c:url value="/bap/admin/work/bizGbnMan.json" />',
postData: gridPostData, postData : gridPostData,
colNames: [ '배치 대외 기관', colNames:['업무구분코드',
'배치 대외 기관명', '업무구분명',
'사용여부' '사용여부'
], ],
colModel: [ colModel:[
{ name : 'BJOBBZWKDSTCD' , align:'center' ,sortable:false }, { name : 'BJOBBZWKDSTCD' , align:'left' ,sortable:false },
{ name : 'BJOBBZWKNAME' , align:'left' }, { name : 'BJOBBZWKNAME' , align:'left' },
{ name : 'THISMSGUSEYN' , align:'center', width:50 , { name : 'THISMSGUSEYN' , align:'center', width:50 ,
formatter: function (cellvalue) { formatter: function (cellvalue) {
if ( cellvalue == '1' ) { if ( cellvalue == '1' ) {
return '사용'; return '사용';
} else { } else {
return '<span style="color:red">사용안함</span>'; return '<span style="color:red">사용안함</span>';
} }
} }
} }
], ],
jsonReader: { jsonReader: {
repeatitems:false repeatitems:false
}, },
pager: $('#pager'), pager : $('#pager'),
page: '${param.page}', page : '${param.page}',
rowNum: '${rmsDefaultRowNum}', rowNum : '${rmsDefaultRowNum}',
autoheight: true, autoheight: true,
height: $("#container").height(), height: $("#container").height(),
autowidth: true, autowidth: true,
viewrecords: true, viewrecords: true,
multiselect: true, rowList : eval('[${rmsDefaultRowList}]'),
rowList: eval('[${rmsDefaultRowList}]'), gridComplete:function (d){
gridComplete:function (d) {
var colModel = $(this).getGridParam("colModel"); var colModel = $(this).getGridParam("colModel");
for(var i = 0 ; i< colModel.length; i++) { for(var i = 0 ; i< colModel.length; i++){
$(this).setColProp(colModel[i].name, {sortable : false}); //그리드 헤더 화살표 삭제(정렬X) $(this).setColProp(colModel[i].name, {sortable : false}); //그리드 헤더 화살표 삭제(정렬X)
} }
},
},
ondblClickRow: function(rowId) { ondblClickRow: function(rowId) {
var rowData = $(this).getRowData(rowId); var rowData = $(this).getRowData(rowId);
var bjobBzwkDstcd = rowData['BJOBBZWKDSTCD'].trim(); var bjobBzwkDstcd = rowData['BJOBBZWKDSTCD'].trim();
var url = '<c:url value="/bap/admin/work/bizGbnMan.view" />'; var url = '<c:url value="/bap/admin/work/bizGbnMan.view" />';
url += '?cmd=DETAIL'; url = url + '?cmd=DETAIL';
url += '&page=' + $(this).getGridParam("page"); url = url + '&page='+$(this).getGridParam("page");
url += '&returnUrl=' + getReturnUrl(); url = url + '&returnUrl='+getReturnUrl();
url += '&menuId=' + '${param.menuId}'; url = url + '&menuId='+'${param.menuId}';
url += '&bjobBzwkDstcd=' + bjobBzwkDstcd; url = url + '&bjobBzwkDstcd='+bjobBzwkDstcd;
//검색값 //검색값
url += '&' + getSearchUrl(); url = url + '&'+getSearchUrl();
goNav(url); goNav(url);
} }
}); });
} }
$(document).ready(function() { $(document).ready(function() {
resizeJqGridWidth('grid', 'title', '1000'); resizeJqGridWidth('grid','title','1000');
var url ='<c:url value="/bap/admin/work/bizGbnMan.json" />'; var url ='<c:url value="/bap/admin/work/bizGbnMan.json" />';
list(url); list(url);
$("#btn_search").click(function() { $("#btn_search").click(function(){
var postData = getSearchForJqgrid("cmd", "LIST"); //jqgrid에서는 object 로 var postData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로
$("#grid").setGridParam({url:url, postData: postData, page:"1" }).trigger("reloadGrid"); $("#grid").setGridParam({url:url, postData: postData, page:"1" }).trigger("reloadGrid");
}); });
$("#btn_new").click(function(){
$("#btn_new").click(function() {
var url = '<c:url value="/bap/admin/work/bizGbnMan.view"/>'; var url = '<c:url value="/bap/admin/work/bizGbnMan.view"/>';
url += '?cmd=DETAIL'; url = url + '?cmd=DETAIL';
url += '&page=' + $("#grid").getGridParam("page"); url = url + '&page='+$("#grid").getGridParam("page");
url += '&returnUrl=' + getReturnUrl(); url = url + '&returnUrl='+getReturnUrl();
url += '&menuId=' + '${param.menuId}'; url = url + '&menuId='+'${param.menuId}';
//검색값 //검색값
url += '&' + getSearchUrl(); url = url + '&'+getSearchUrl();
goNav(url); goNav(url);
}); });
$("input[name^=search]").keydown(function(key) { $("input[name^=search]").keydown(function(key){
if (key.keyCode == 13) { if (key.keyCode == 13){
$("#btn_search").click(); $("#btn_search").click();
} }
}); });
$("#btn_excel").click(function(event) {
event.stopPropagation(); // Do not propagate the event.
// Create an object that will manage to download the file.
var merge = new Array();
gridToExcelSubmit(url_excel, "LIST_GRID_TO_EXCEL", $("#grid"), $("#ajaxForm"), "배치 대외 기관 관리", merge);
return false;
});
$("#btn_download").click(function() {
let selectedVal = "";
const rowIds = $("#grid").getGridParam("selarrrow");
rowIds.forEach(rowId => {
selectedVal += "," + $("#grid").getRowData(rowId).BJOBBZWKDSTCD;
});
if(selectedVal != "") selectedVal = selectedVal.substring(1);
var url ='<c:url value="/loader.do" />';
url += '?cmd=bizGbnMan';
url += '&control=download';
url += '&serviceType=' + sessionStorage["serviceType"];
url += '&fileName=bizGbnMan';
url += '&selectedVal=' + selectedVal;
url += '&' + getSearchUrl();
goNav(url);
});
$("#multiform").on('submit', fileupload);
$('#btn_upload').click(function() {
if( confirm( "동일한 이름의 경우 기존내용을 수정합니다.\n\n업로드 하시겠습니까?" ) != true ) return;
if(window.FormData !== undefined) {
$("input[name=file]").click();
} else {
if($("input[name=file]").val() == "") return;
$("#multiform").submit();
}
});
if(window.FormData !== undefined) {
$("input[name=file]").change(function(ev) {
var filename = $(this).val().split('\\').pop();
if (!filename.startsWith('bizGbnMan')) {
alert("배치대외기관 JSON 파일을 선택하십시오.\n\n[파일명 : bizGbnMan.json]")
return false;
}
if(filename == "") return;
else $("#multiform").submit();
});
}
if(window.FormData !== undefined) {
$("input[name=file]").hide();
} else {
$("input[name=file]").show();
}
buttonControl(); buttonControl();
}); });
</script> </script>
</head> </head>
<body> <body>
<div class="right_box"> <div class="right_box">
<div class="content_top"> <div class="content_top">
<ul class="path"> <ul class="path">
<li><a href="#">${rmsMenuPath}</a></li> <li><a href="#">${rmsMenuPath}</a></li>
</ul> </ul>
</div><!-- end content_top --> </div><!-- end content_top -->
<div class="content_middle" id="title"> <div class="content_middle" id="title">
<form id="multiform" method="POST" enctype="multipart/form-data" action="<c:url value="/loader.file"/>"> <div class="search_wrap">
<div class="search_wrap"> <img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" />
<input type="file" id="file" name="file" style="display:inline-block"/> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
<input type="hidden" name="cmd" value="bizGbnMan"/> </div>
<input type="hidden" name="control" value="upload"/> <div class="title">업무구분 관리<span class="tooltip">일괄 전송 파일을 송수신 업무 구분 코드를 관리 하는 화면입니다</span></div>
<img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R" />
<img src="<c:url value="/img/btn_upload.png"/>" alt="" id="btn_upload" level="W" /> <table class="search_condition" cellspacing=0;>
<img src="<c:url value="/img/btn_download.png"/>" alt="" id="btn_download" level="R" /> <tbody>
<img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" /> <tr>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <th style="width:180px;">업무구분코드</th>
</div> <td><input type="text" name="searchbjobBzwkDstcd" value="${param.searchbjobBzwkDstcd}"></td>
</form> <th style="width:180px;">업무구분명</th>
<div class="title">배치 대외 기관 관리<span class="tooltip">배치 대외 기관 코드를 관리 하는 화면입니다</span></div> <td><input type="text" name="searchbjobBzwkName" value="${param.searchBjobBzwkName}"></td>
</tr>
<table class="search_condition" cellspacing=0;> </tbody>
<tbody> </table>
<tr> <table id="grid" ></table>
<th style="width:180px;">배치 대외 기관</th> <div id="pager"></div>
<td><input type="text" name="searchbjobBzwkDstcd" value="${param.searchbjobBzwkDstcd}"></td>
<th style="width:180px;">배치 대외 기관명</th>
<td><input type="text" name="searchbjobBzwkName" value="${param.searchbjobBzwkName}"></td> </div><!-- end content_middle -->
</tr> </div><!-- end right_box -->
</tbody> </body>
</table> </html>
<table id="grid"></table>
<div id="pager"></div>
</div><!-- end content_middle -->
</div><!-- end right_box -->
</body>
</html>
@@ -324,24 +324,24 @@ $(document).ready(function() {
<img src="<c:url value="/img/btn_modify.png"/>" alt="" id="btn_modify" level="W" status="DETAIL,NEW" /> <img src="<c:url value="/img/btn_modify.png"/>" alt="" id="btn_modify" level="W" status="DETAIL,NEW" />
<img src="<c:url value="/img/btn_previous.png"/>" alt="" id="btn_previous" level="R" status="DETAIL,NEW"/> <img src="<c:url value="/img/btn_previous.png"/>" alt="" id="btn_previous" level="R" status="DETAIL,NEW"/>
</div> </div>
<div class="title">배치 대외 기관 코드</div> <div class="title">업무구분코드</div>
<form id="ajaxForm"> <form id="ajaxForm">
<table id="tb_clone" class="table_row" cellspacing="0"> <%-- <table id="tb_clone" class="table_row" cellspacing="0">
<tr> <tr>
<td colspan="4"> <td colspan="4">
<input type="text" name="newBjobBzwkDstcd" style="width:200px;"> <input type="text" name="newBjobBzwkDstcd" style="width:200px;">
<img id="btn_clone" src="<c:url value="/img/btn_clone.png" />" class="btn_img"/> <img id="btn_clone" src="<c:url value="/img/btn_clone.png" />" class="btn_img"/>
</td> </td>
</tr> </tr>
</table> </table> --%>
<table class="table_row" cellspacing="0"> <table class="table_row" cellspacing="0">
<!-- 공통--> <!-- 공통-->
<tr> <tr>
<th style="width:180px;">배치 대외 기관 코드</th><td><input type="text" name="bjobBzwkDstcd" /></td> <th style="width:180px;">업무구분코드</th><td><input type="text" name="bjobBzwkDstcd" /></td>
</tr> </tr>
<tr> <tr>
<th>배치 대외 기관명</th><td><input type="text" name="bjobBzwkName" /></td> <th>업무구분명</th><td><input type="text" name="bjobBzwkName" /></td>
</tr> </tr>
<tr> <tr>
<th>당메시지 사용여부 *</th> <th>당메시지 사용여부 *</th>
+203 -330
View File
@@ -9,342 +9,215 @@
<html> <html>
<head> <head>
<title></title> <title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<jsp:include page="/jsp/common/include/css.jsp"/> <jsp:include page="/jsp/common/include/css.jsp" />
<jsp:include page="/jsp/common/include/script.jsp"/> <jsp:include page="/jsp/common/include/script.jsp" />
<script language="javascript" > <script language="javascript">
var selectName = "searchBjobBzwkDstcd"; function list(url) {
var url_excel = '<c:url value="/common/noauth/excel/listGridToExcel.json" />'; var gridPostData = getSearchForJqgrid("cmd", "LIST"); //jqgrid에서는 object 로
var url ='<c:url value="/bap/admin/work/messageProcMan.json" />'; $("#grid").jqGrid({
datatype: "json",
mtype: "POST",
url: '<c:url value="/bap/admin/work/messageProcMan.json" />',
postData: gridPostData,
colNames: [
"메시지구분코드",
"업무구분명",
"송수신파일명",
"송수신파일설명",
"업무코드(Lv2)",
"담당자",
"레코드 길이",
"송신여부",
"수신여부",
"사용여부",
],
colModel: [
{ name: "BJOBMSGDSTCD", hidden: true },
{ name: "BJOBBZWKNAME", align: "left" },
{ name: "BJOBTRANDSTCDNAME", align: "left" },
{ name: "BJOBMSGDSTICNAME", align: "left" },
{ name: "UAPPLCD", align: "center", hidden: true },
{ name: "THISMSGCHRGIDS", align: "left" },
{ name: "BJOBTELGMRECSIZE", align: "center" },
{
name: "EAIFILESENDUSEYN",
align: "center",
formatter: function (cellvalue) {
if (cellvalue == "1") {
return "사용";
} else {
return '<span style="color:red">사용안함</span>';
}
},
},
{
name: "EAIFILERECVUSEYN",
align: "center",
formatter: function (cellvalue) {
if (cellvalue == "1") {
return "사용";
} else {
return '<span style="color:red">사용안함</span>';
}
},
},
{
name: "THISMSGUSEYN",
align: "center",
formatter: function (cellvalue) {
if (cellvalue == "1") {
return "사용";
} else {
return '<span style="color:red">사용안함</span>';
}
},
},
],
jsonReader: {
repeatitems: false,
},
pager: $("#pager"),
page: "${param.page}",
rowNum: "${rmsDefaultRowNum}",
autoheight: true,
height: $("#container").height(),
autowidth: true,
viewrecords: true,
rowList: eval("[${rmsDefaultRowList}]"),
gridComplete: function (d) {
var colModel = $(this).getGridParam("colModel");
for (var i = 0; i < colModel.length; i++) {
$(this).setColProp(colModel[i].name, { sortable: false }); //그리드 헤더 화살표 삭제(정렬X)
}
},
ondblClickRow: function (rowId) {
var rowData = $(this).getRowData(rowId);
var bjobMsgDstcd = rowData["BJOBMSGDSTCD"].trim();
var url = '<c:url value="/bap/admin/work/messageProcMan.view" />';
url = url + "?cmd=DETAIL";
url = url + "&page=" + $(this).getGridParam("page");
url = url + "&menuId=" + "${param.menuId}";
url = url + "&returnUrl=" + getReturnUrl();
url = url + "&bjobMsgDstcd=" + bjobMsgDstcd;
url = url + "&" + getSearchUrl();
//검색값
goNav(url);
},
});
}
function fileupload(e,successcallback,errorcallback) { $(document).ready(function () {
var formObj = $(this); resizeJqGridWidth("grid", "title", "1000");
var formURL = formObj.attr("action"); var url = '<c:url value="/bap/admin/work/messageProcMan.json" />';
if(window.FormData !== undefined) // for HTML5 browsers list(url);
{
var formData = new FormData(this);
$.ajax({
url: formURL,
type: 'POST',
data: formData,
encType: "multipart/form-data",
contentType: false,
cache: false,
processData: false,
success: function(json, textStatus, jqXHR) {
$("input[name=file]").val("");
if(textStatus == 'success') {
alert('정상처리 되었습니다.');
$("#btn_search").click();
} else {
alert('업로드중 에러가 발생하였습니다.');
}
},
error: function(jqXHR, textStatus, errorThrown) {
$("input[name=file]").val("");
if (typeof callback === 'function') {
errorcallback(jqXHR, textStatus, errorThrown);
}
}
});
e.preventDefault();
if (e.unbind) e.unbind();
} else { //for olden browsers
formObj.append($("<input type='hidden' name='serviceType' value='" + sessionStorage["serviceType"] + "' />"));
//generate a random id
var iframeId = 'unique' + (new Date().getTime());
//create an empty iframe
var iframe = $('<iframe src="javascript:false;" id="' + iframeId + '" name="' + iframeId + '" />');
//hide it $("#btn_search").click(function () {
iframe.hide(); var postData = getSearchForJqgrid("cmd", "LIST"); //jqgrid에서는 object 로
$("#grid")
.setGridParam({ url: url, postData: postData, page: "1" })
.trigger("reloadGrid");
});
$("#btn_new").click(function () {
var url = '<c:url value="/bap/admin/work/messageProcMan.view"/>';
url = url + "?cmd=DETAIL";
url = url + "&page=" + $("#grid").getGridParam("page");
url = url + "&returnUrl=" + getReturnUrl();
url = url + "&menuId=" + "${param.menuId}";
//검색값
url = url + "&" + getSearchUrl();
//set form target to iframe goNav(url);
formObj.attr('target', iframeId); });
formObj.attr('action', '<c:url value="/loader.file" />');
//Add iframe to body $("input[name^=search]").keydown(function (key) {
iframe.appendTo('body'); if (key.keyCode == 13) {
iframe.load(function(e) { $("#btn_search").click();
var doc = getDoc(iframe[0]); }
var docRoot = doc.body ? doc.body : doc.documentElement; });
var data = docRoot.innerHTML; $("input[name^=like]").keydown(function (key) {
var k = JSON.parse(data); if (key.keyCode == 13) {
$("#grid")[0].addJSONData(k); $("#btn_search").click();
$("input[name=file]").val(""); }
//data is returned from server. });
if (typeof callback === 'function') {
//successcallback(data);
}
});
}
}
function list() { buttonControl();
var gridPostData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로 });
$('#grid').jqGrid({ </script>
datatype: "json", </head>
mtype: 'POST', <body>
url: url, <div class="right_box">
postData: gridPostData, <div class="content_top">
colNames: [ '인터페이스ID', <ul class="path">
'인터페이스설명', <li><a href="#">${rmsMenuPath}</a></li>
'수신업무/기관', </ul>
'송신업무/기관', </div>
'송수신파일명', <!-- end content_top -->
'세부기관코드', <div class="content_middle">
'레코드 길이', <div class="search_wrap">
'송/수신여부', <img src="<c:url value="/img/btn_new.png" />" alt="" id="btn_new"
/* '수신여부', */ level="W" /> <img src="<c:url value="/img/btn_search.png" />" alt=""
'사용여부' id="btn_search" level="R" />
], </div>
colModel: [ <div class="title">
{ name: 'BJOBMSGDSTCD' , align: 'center' }, 송수신 파일 관리<span class="tooltip"
{ name: 'BJOBMSGDSTICNAME' , align: 'left' }, >일괄 전송에서 사용하는 송수신 파일을 관리 하는 화면입니다</span
{ name: 'BJOBBZWKDSTCD' , align: 'center' }, >
{ name: 'UAPPLCD' , align: 'center' }, </div>
{ name: 'BJOBTRANDSTCDNAME' , align: 'left' },
{ name: 'BJOBINSTIDSTCD' , align: 'center' },
{ name: 'BJOBTELGMRECSIZE' , align: 'center' },
{ name: 'EAIFILESENDUSEYN' , align: 'center' ,
formatter: function (cellvalue) {
if ( cellvalue == '1' ) {
return '송신';
} else {
return '수신';
}
}
},
{ name: 'THISMSGUSEYN' , align: 'center' ,
formatter: function (cellvalue) {
if ( cellvalue == '1' ) {
return '사용';
} else {
return '<span style="color:red">사용안함</span>';
}
}
}
],
jsonReader: {
repeatitems:false
},
pager: $('#pager'),
page: '${param.page}',
rowNum: '${rmsDefaultRowNum}',
autoheight: true,
height: $("#container").height(),
autowidth: true,
viewrecords: true,
multiselect: true,
rowList: eval('[${rmsDefaultRowList}]'),
gridComplete: function (d) {
var colModel = $(this).getGridParam("colModel");
for(var i = 0 ; i< colModel.length; i++) {
$(this).setColProp(colModel[i].name, {sortable: false}); //그리드 헤더 화살표 삭제(정렬X)
}
},
ondblClickRow: function(rowId) {
var rowData = $(this).getRowData(rowId);
var bjobMsgDstcd = rowData['BJOBMSGDSTCD'].trim();
var url = '<c:url value="/bap/admin/work/messageProcMan.view" />';
url += '?cmd=DETAIL';
url += '&page=' + $(this).getGridParam("page");
url += '&menuId=' + '${param.menuId}';
url += '&returnUrl=' + getReturnUrl();
url += '&bjobMsgDstcd=' + bjobMsgDstcd;
url += '&' + getSearchUrl();
//검색값
goNav(url);
}
});
}
function init() { <table class="search_condition" cellspacing="0;">
$.ajax({ <tbody>
type: "POST", <tr>
url: url, <th style="width: 180px">업무구분명</th>
dataType: "json", <td>
data: { cmd: 'LIST_INIT_COMBO' }, <input
success: function(json) { type="text"
new makeOptions("CODE","NAME").setObj($("select[name=searchBjobBzwkDstcd]")).setNoValueInclude(true).setNoValue('', '전체').setData(json.bjobBzwkDstcd).rendering(); // 업무구분코드 name="likeBjobBzwkName"
list(); value="${param.likeBjobBzwkName}"
}, />
error: function(e) { </td>
alert(e.responseText); <th style="width: 180px">송수신파일명</th>
} <td>
}); <input
setSearchable(selectName); // 콤보에 searchable 설정 type="text"
} name="likeBjobTranDstcdName"
value="${param.likeBjobTranDstcdName}"
/>
</td>
<th style="width: 180px">송수신파일설명</th>
<td>
<input
type="text"
name="likeBjobMsgDsticName"
value="${param.likeBjobMsgDsticName}"
/>
</td>
<th style="width: 180px" hidden="hidden">어플리케이션코드</th>
<td hidden="hidden">
<input
type="text"
name="likeUapplCd"
value="${param.likeUapplCd}"
/>
</td>
<th style="width: 180px" hidden="hidden">담당자ID</th>
<td hidden="hidden">
<input
type="text"
name="likeThisMsgChrgIDs"
value="${param.likeThisMsgChrgIDs}"
/>
</td>
</tr>
</tbody>
</table>
$(document).ready(function() { <table id="grid"></table>
<div id="pager"></div>
resizeJqGridWidth('grid', 'title', '1000'); </div>
init(); <!-- end content_middle -->
</div>
$("#btn_search").click(function() { <!-- end right_box -->
var postData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로 </body>
$("#grid").setGridParam({url:url, postData: postData,page:"1" }).trigger("reloadGrid");
});
$("#btn_new").click(function() {
var url = '<c:url value="/bap/admin/work/messageProcMan.view"/>';
url += '?cmd=DETAIL';
url += '&page=' + $("#grid").getGridParam("page");
url += '&returnUrl=' + getReturnUrl();
url += '&menuId=' + '${param.menuId}';
//검색값
url += '&'+getSearchUrl();
goNav(url);
});
$("input[name^=search]").keydown(function(key) {
if (key.keyCode == 13) {
$("#btn_search").click();
}
});
$("input[name^=like]").keydown(function(key) {
if (key.keyCode == 13) {
$("#btn_search").click();
}
});
$("#btn_excel").click(function(event) {
event.stopPropagation(); // Do not propagate the event.
// Create an object that will manage to download the file.
var merge = new Array();
gridToExcelSubmit(url_excel, "LIST_GRID_TO_EXCEL", $("#grid"), $("#ajaxForm"), "송수신 파일 관리", merge);
return false;
});
$("#btn_download").click(function() {
let selectedVal = "";
const rowIds = $("#grid").getGridParam("selarrrow");
rowIds.forEach(rowId => {
selectedVal += "," + $("#grid").getRowData(rowId).BJOBMSGDSTCD;
});
if(selectedVal != "") selectedVal = selectedVal.substring(1);
var url ='<c:url value="/loader.do" />';
url += '?cmd=messageProcMan';
url += '&control=download';
url += '&serviceType=' + sessionStorage["serviceType"];
url += '&fileName=messageProcMan';
url += '&selectedVal=' + selectedVal;
url += '&' + getSearchUrl();
goNav(url);
});
$("#multiform").on('submit', fileupload);
$('#btn_upload').click(function() {
if( confirm( "동일한 이름의 경우 기존내용을 수정합니다.\n\n업로드 하시겠습니까?" ) != true ) return;
if(window.FormData !== undefined) {
$("input[name=file]").click();
} else {
if($("input[name=file]").val() == "") return;
$("#multiform").submit();
}
});
if(window.FormData !== undefined) {
$("input[name=file]").change(function(ev) {
var filename = $(this).val().split('\\').pop();
if (!filename.startsWith('messageProcMan')) {
alert("송수신 파일관리 JSON 파일을 선택하십시오.\n\n[파일명 : messageProcMan.json]")
return false;
}
if(filename == "") return;
else $("#multiform").submit();
});
}
if(window.FormData !== undefined) {
$("input[name=file]").hide();
} else {
$("input[name=file]").show();
}
buttonControl();
});
</script>
</head>
<body>
<div class="right_box">
<div class="content_top">
<ul class="path">
<li><a href="#">${rmsMenuPath}</a></li>
</ul>
</div><!-- end content_top -->
<div class="content_middle" id="title">
<form id="multiform" method="POST" enctype="multipart/form-data" action="<c:url value="/loader.file"/>">
<div class="search_wrap">
<input type="file" id="file" name="file" style="display:inline-block"/>
<input type="hidden" name="cmd" value="messageProcMan"/>
<input type="hidden" name="control" value="upload"/>
<img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R" />
<img src="<c:url value="/img/btn_upload.png"/>" alt="" id="btn_upload" level="W" />
<img src="<c:url value="/img/btn_download.png"/>" alt="" id="btn_download" level="R" />
<img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" />
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
</div>
</form>
<div class="title">송수신 파일 관리<span class="tooltip">일괄 전송에서 사용하는 송수신 파일을 관리 하는 화면입니다</span></div>
<table class="search_condition" cellspacing=0;>
<tbody>
<tr>
<th style="width:150px;">인터페이스ID</th>
<td><input type="text" name="likeBjobMsgDstcd" value="${param.likeBjobMsgDstcd}"></td>
<th style="width:150px;">업무구분코드</th>
<td>
<div class="select-style">
<select name="searchBjobBzwkDstcd" value="${param.searchBjobBzwkDstcd}"></select>
</div>
</td>
<th style="width:150px;">세부기관코드</th>
<td><input type="text" name="likeBjobInstiDstcd" value="${param.likeBjobInstiDstcd}"></td>
</tr>
<tr>
<th style="width:150px;">송수신파일설명</th>
<td><input type="text" name="likeBjobTranDstcdName" value="${param.likeBjobTranDstcdName}"></td>
<th style="width:150px;">인터페이스설명</th>
<td><input type="text" name="likeBjobMsgDsticName" value="${param.likeBjobMsgDsticName}"></td>
<th style="width:150px;">사용여부</th>
<td style="width:350px;">
<div class="select-style">
<select name="searchThisMsgUseYn" value="${param.searchThisMsgUseYn}">
<option value="">전체</option>
<option value="1">사용</option>
<option value="0">사용안함</option>
</select>
</div>
</td>
</tr>
<tr>
<th style="width:150px;" hidden="hidden">어플리케이션코드</th>
<td hidden="hidden"><input type="text" name="likeUapplCd" value="${param.likeUapplCd}"></td>
<th style="width:150px;" hidden="hidden">담당자ID</th>
<td hidden="hidden"><input type="text" name="likeThisMsgChrgIDs" value="${param.likeThisMsgChrgIDs}"></td>
<th style="width:150px;" hidden="hidden"></th>
<td hidden="hidden"></td>
</tr>
</tbody>
</table>
<table id="grid" ></table>
<div id="pager"></div>
</div><!-- end content_middle -->
</div><!-- end right_box -->
</body>
</html> </html>
@@ -16,529 +16,387 @@
<script language="javascript" > <script language="javascript" >
var selectName = "bjobBzwkDstcd,uapplCd"; // selectBox Name var isDetail = false;
var isDetail = false; var lastsel2;
var lastsel2;
var isPopup = "${param.ispop}";
function isValid() { function isValid(){
if($('input[name=bjobBzwkDstcd]').val() == ""){
if( $('input[name=bjobMsgDstcd]').val().trim() == "" ) { alert("업무그룹코드를 입력하여 주십시요.");
alert("인터페이스ID를 입력하여 주십시요.");
return false; return false;
} else if( $('select[name=bjobBzwkDstcd]').val() == "" ) { }else if($('input[name=bjobBzwkName]').val() == ""){
alert("업무그룹코드를 선택하여 주십시요."); alert("업무그룹명를 입력하여 주십시요.");
return false; return false;
} else if( $('select[name=bjobInstiDstcd]').val() == "" ) { }
alert("대외기관코드를 선택하여 주십시요.");
return false;
} else if( $('input[name=bjobTranDstcdName]').val() == "" ) {
alert("BATCH작업메시지구분코드를 입력하여 주십시요.");
return false;
} else if( $('input[name=bjobMsgDsticName]').val() == "" ) {
alert("BATCH작업메시지구분명을 입력하여 주십시요.");
return false;
} else if( $('input[name=bjobTelgmHdrSize]').val() == "" ) {
alert("BATCH작업전문헤더크기를 입력하여 주십시요.");
return false;
} else if( $('input[name=bjobTelgmRecSize]').val() == "" ) {
alert("BATCH작업전문데이터크기를 입력하여 주십시요.");
return false;
} else if( $('input[name=uapplCd]').val() == "" ) {
alert("APPLICATION CODE를 선택하여 주십시요.");
return false;
}
return true; return true;
} }
function gridRendering() {
function gridRendering(){
$('#grid').jqGrid({ $('#grid').jqGrid({
datatype: "local", datatype:"local",
loadonce: true, loadonce: true,
rowNum: 10000, rowNum: 10000,
editurl: "clientArray", editurl : "clientArray",
colNames: ['프라퍼티명', colNames:['프라퍼티명',
'프라퍼티설명', '프라퍼티설명',
'프라퍼티값' '프라퍼티값'
], ],
colModel: [ colModel:[
{ name : 'PRPTYNAME' , align:'left' }, { name : 'PRPTYNAME' , align:'left' },
{ name : 'PRPTYDESC' , align:'left' }, { name : 'PRPTYDESC' , align:'left' },
{ name : 'PRPTY2VAL' , align:'left', editable : true } { name : 'PRPTY2VAL' , align:'left', editable : true }
], ],
jsonReader: { jsonReader: {
repeatitems: false repeatitems:false
}, },
loadComplete: function () { loadComplete : function () {
},
onSelectRow: function(rowid,status) { },
if ( lastsel2 !=undefined ) { onSelectRow: function(rowid,status){
if( $("#grid tr#" + lastsel2).attr("editable") == 1 ) { //editable=1 means row in edit mode if (lastsel2 !=undefined){
$("#grid").saveRow(lastsel2,false,"clientArray"); if($("#grid tr#" + lastsel2).attr("editable") == 1){ //editable=1 means row in edit mode
$("#grid").saveRow(lastsel2,false,"clientArray");
} }
} }
$('#grid').restoreRow(lastsel2); $('#grid').restoreRow(lastsel2);
$('#grid').editRow(rowid,true); $('#grid').editRow(rowid,true);
lastsel2=rowid; lastsel2=rowid;
},
onSortCol: function(){ },
return 'stop'; //정렬 방지 onSortCol : function(){
}, return 'stop'; //정렬 방지
height: '300', },
height: '300',
autowidth: true, autowidth: true,
viewrecords: true viewrecords: true
}); });
resizeJqGridWidth('grid','title','1000');
resizeJqGridWidth('grid','title','1000');
} }
function init(url,key){
function init(url,key) { $.ajax({
$.ajax({ type : "POST",
type: "POST", url:url,
url: url, dataType:"json",
dataType: "json", data:{cmd: 'LIST_INIT_COMBO'},
data: { cmd: 'LIST_INIT_COMBO' }, success:function(json){
success: function(json) { new makeOptions("CODE","NAME").setObj($("select[name=bjobBzwkDstcd]")).setData(json.bjobBzwkDstcd).rendering();
// new makeOptions("CODE","NAME").setObj($("select[name=bjobBzwkDstcd]")).setData(json.bjobBzwkDstcd).rendering(); new makeOptions("CODE","NAME").setObj($("select[name=sysCd]")).setNoValueInclude(true).setNoValue(' ','없음').setData(json.sysCd).rendering();
new makeOptions("CODE","NAME").setObj($("select[name=bjobBzwkDstcd]")).setData(json.bjobBzwkDstcd).rendering(); // 업무구분코드 new makeOptions("CODE","NAME").setObj($("select[name=sysCd2]")).setNoValueInclude(true).setNoValue('','없음').setData(json.sysCd).rendering();
// new makeOptions("CODE","NAME").setObj($("select[name=bjobInstiDstcd]")).setFormat(codeName3OptionFormat).setData(json.bjobInstiDstcd).rendering(); // 대외기관코드 /* new makeOptions("CODE","NAME").setObj($("select[name=uapplCd]")).setNoValueInclude(true).setNoValue(' ','없음').setData(json.uapplCd).rendering(); */
//new makeOptions("BIZCODE","BIZNAME").setObj($("select[name=EAIBZWKDSTCD]")).setFormat(codeName3OptionFormat).setData(json.bizRows).rendering(); // 업무구분코드 //new makeOptions("CODE","NAME").setObj($("select[name=bizlevel1]")).setNoValueInclude(true).setNoValue(' ','없음').setData(json.bizlevel1).rendering();
new makeOptions("CODE","NAME").setObj($("select[name=bJobCycleGb]")).setData(json.bJobCycleGb).rendering(); // BATCH작업주기구분(BAP_CYCLE_GB) //new makeOptions("CODE","NAME").setObj($("select[name=bizlevel2]")).setNoValueInclude(true).setNoValue(' ','없음').setData(json.bizlevel2).rendering();
//setSearchable('bjobBzwkDstcd');
// new makeOptions("CODE","NAME").setObj($("select[name=groupCoCd]")).setData(json.groupCoCd).rendering(); //setSearchable('uapplCd');
// new makeOptions("CODE","NAME").setObj($("select[name=sysCd]")).setNoValueInclude(true).setNoValue('','없음').setData(json.sysCd).rendering(); debugger;
new makeOptions("CODE","NAME").setObj($("select[name=uapplCd]")).setData(json.uapplCd).rendering(); // 어플리케이션코드 if ( isDetail ){
detail(url, key);
if ( isDetail ) { }else{
detail(url, key); setSearchable('bjobBzwkDstcd');
} else {
$.ajax({ $.ajax({
type: "POST", type : "POST",
url: url, url:url,
dataType: "json", dataType:"json",
data: { cmd: 'LIST_PROP', data:{ cmd: 'LIST_PROP',
bjobBzwkDstcd : $("select[name=bjobBzwkDstcd]").val(), bjobBzwkDstcd : $("select[name=bjobBzwkDstcd]").val()
bjobMsgDstcd : $("input[name=bjobMsgDstcd]").val() },
}, success:function(json){
success: function(json) { $("#grid")[0].addJSONData(json);
$("#grid")[0].addJSONData(json.propMap); $("input[name=prptyGroupName]").val("TelegramInfo{" + detail["BJOBBZWKDSTCD"] + "_" + detail["BJOBTRANDSTCDNAME"] + "}");
$("select[name=bjobInstiDstcd] option").remove(); $("input[name=thisMsgChrgIDs]").val(' ');
new makeOptions("CODE","NAME").setObj($("select[name=bjobInstiDstcd]")).setFormat(codeName3OptionFormat).setData(json.InstMap.rows).rendering(); // 대외기관코드 $("input[name=intfID]").val(' ');
$("input[name=prptyGroupName]").val("TelegramInfo{" + detail["BJOBMSGDSTCD"] + "}");
// $("input[name=thisMsgChrgIDs]").val(' ');
// $("input[name=intfID]").val(' ');
$("input[name=msgPrcssPrity]").val('999'); $("input[name=msgPrcssPrity]").val('999');
$("input[name=dupCnt]").val('0');
$("input[name=endCnt]").val('0'); },
}, error:function(e){
error: function(e) { // alert(e.responseText);
alert(e.responseText); }
} });
});
} }
}, },
error: function(e) { error:function(e){
alert(e.responseText); // alert(e.responseText);
} }
}); });
setSearchable(selectName); // 콤보에 searchable 설정
} }
function detail(url,key) { function detail(url,key){
if ( !isDetail ) return; if (!isDetail)return;
$.ajax({ $.ajax({
type: "POST", type : "POST",
url: url, url:url,
dataType: "json", dataType:"json",
data: { cmd: 'DETAIL', data:{ cmd: 'DETAIL',
bjobMsgDstcd : key bjobMsgDstcd : key
}, },
success: function(json) { success:function(json){
var data = json; var data = json;
var detail = json.detail; var detail = json.detail;
//adapterType
$("input[name=bjobMsgDstcd]").attr('readonly',true);
$("select[name=bjobBzwkDstcd]").attr('disabled',false);
$("input[name=bjobTranDstcdName]").attr('readonly',false);
$("input,select").each(function() {
try {
var name = $(this).attr('name').toUpperCase();
$(this).val(detail[name]);
} catch (e) {}
});
// 파일 송수신 구분
$("select[name=fileSndRcvGbn]").val(detail["FILESENDUSEYN"] == 1 ? "S" : "R");
// 대외기관코드 change 및 값 설정
$("select[name=bjobInstiDstcd]").attr('disabled',false);
$("input[name=bjobInstiDstVal]").val(detail["BJOBINSTIDSTCD"]); // 임시로 저장
$("select[name=bjobBzwkDstcd]").val($("select[name=bjobBzwkDstcd]").val()).trigger("change");
if ( $("input[name=dupCnt]").val().trim() == "" ) $("input[name=dupCnt]").val('0'); //adapterType
if ( $("input[name=endCnt]").val().trim() == "" ) $("input[name=endCnt]").val('0'); $("select[name=bjobBzwkDstcd]").attr('disabled',true);
$("input[name=bjobTranDstcdName]").attr('readonly',true);
$("input,select").each(function(){
var name = $(this).attr('name').toUpperCase();
$(this).val(detail[name]);
});
//Prop //Prop
$("#grid")[0].addJSONData(data.rows); $("#grid")[0].addJSONData(data);
setSearchable('uapplCd');
}, },
error: function(e) { error:function(e){
alert(e.responseText); // alert(e.responseText);
} }
}); });
} }
var submitData = {}; var submitData = {};
$(document).ready(function() { $(document).ready(function() {
var returnUrl = getReturnUrlForReturn(); var returnUrl = getReturnUrlForReturn();
var url ='<c:url value="/bap/admin/work/messageProcMan.json" />'; var url ='<c:url value="/bap/admin/work/messageProcMan.json" />';
var key ="${param.bjobMsgDstcd}"; var key ="${param.bjobMsgDstcd}";
$("input[name*=Size]").inputmask('decimal',{groupSeparator:',',digits:0,autoGroup:true,prefix:'',rightAlign:false,autoUnmask:true,removeMaskOnSubmit:true}); $("input[name*=Size]").inputmask('decimal',{groupSeparator:',',digits:0,autoGroup:true,prefix:'',rightAlign:false,autoUnmask:true,removeMaskOnSubmit:true});
if ( key != "" && key !="null" ){ if (key != "" && key !="null"){
isDetail = true; isDetail = true;
} }
gridRendering(); gridRendering();
init(url,key); init(url,key);
$("#btn_modify").click(function(){ $("#btn_modify").click(function(){
debugger;
if (!isValid()) return; if (!isValid())return;
if($("#grid tr#" + lastsel2).attr("editable") == 1){ //editable=1 means row in edit mode
if (isDetail) {
if ( confirm( "수정하시겠습니까?" ) != true ) return;
} else {
if ( confirm( "등록하시겠습니까?" ) != true ) return;
}
if( $("#grid tr#" + lastsel2).attr("editable") == 1 ) { //editable=1 means row in edit mode
$("#grid").saveRow(lastsel2,false,"clientArray"); $("#grid").saveRow(lastsel2,false,"clientArray");
} }
var data = $("#grid").getRowData(); var data = $("#grid").getRowData();
var gridData = new Array(); var gridData = new Array();
for ( var i = 0; i <data.length; i++ ) { for (var i = 0; i <data.length; i++) {
gridData.push(data[i]); gridData.push(data[i]);
} }
// 파일 송/수신구분 설정
$("input[name=fileSendUseYn]").val($("select[name=fileSndRcvGbn]").val() == 'S' ? '1' : '0');
$("input[name=fileRecvUseYn]").val($("select[name=fileSndRcvGbn]").val() == 'R' ? '1' : '0');
//공통부만 form으로 구성 //공통부만 form으로 구성
var postData = $('#ajaxForm').serializeArray(); var postData = $('#ajaxForm').serializeArray();
postData.push({ name: "gridData" , value: JSON.stringify(gridData)}); postData.push({ name: "gridData" , value:JSON.stringify(gridData)});
postData.push({ name: "bjobBzwkDstcd" , value: $("select[name=bjobBzwkDstcd]").val()}); postData.push({ name: "bjobBzwkDstcd" , value: $("select[name=bjobBzwkDstcd]").val()});
postData.push({ name: "prptyGroupName" , value: "TelegramInfo{" + $("input[name=bjobMsgDstcd]").val() + "}"}); postData.push({ name: "prptyGroupName" , value:"TelegramInfo{" + $("select[name=bjobBzwkDstcd]").val() + "_" + $("input[name=bjobTranDstcdName]").val() + "}"});
postData.push({ name: "prptyGroupDesc" , value: $("select[name=bjobBzwkDstcd]").val()+"배치 작업의 [" +$("input[name=bjobTranDstcdName]").val() + "]메시지의 송수신 전문용 프로퍼티 정의"}); postData.push({ name: "prptyGroupDesc" , value:$("select[name=bjobBzwkDstcd]").val()+"배치 작업의 [" +$("input[name=bjobTranDstcdName]").val() + "]메시지의 송수신 전문용 프로퍼티 정의"});
if ( isDetail ) { if (isDetail){
postData.push( { name: "cmd" , value:"UPDATE"} ); postData.push({ name: "cmd" , value:"UPDATE"});
$.ajax({ }else{
type: "POST", postData.push({ name: "cmd" , value:"INSERT"});
url: url,
data: postData,
success: function(args) {
alert("저장 되었습니다.");
if ( isPopup == 'Y' ) {
window.close();
} else {
goNav(returnUrl);//LIST로 이동
}
},
error: function(e) {
alert(e.responseText);
}
});
} else {
$.ajax({
type: "POST",
url: url,
dataType: "json",
data: { cmd: 'INITIALIZE_PK',
tableName: 'TSEAIBJ01',
columnName: "BjobMsgDstcd",
columnValue: $('input[name=bjobMsgDstcd]').val()
},
success:function(json) {
if( json.checkPK == 'Y' ) {
alert("이미 사용중인 인터페이스ID 입니다.\n\n다른 인터페이스ID를 입력하여 주십시요.");
return false;
} else {
$.ajax({
type: "POST",
url: url,
data: postData,
success: function(args) {
alert("저장 되었습니다.");
goNav(returnUrl);//LIST로 이동
},
error: function(e) {
alert(e.responseText);
}
});
}
}
});
postData.push( { name: "cmd" , value:"INSERT"} );
} }
$.ajax({
type : "POST",
url:url,
data:postData,
success:function(args){
alert("저장 되었습니다.");
goNav(returnUrl);//LIST로 이동
},
error:function(e){
// alert(e.responseText);
}
});
}); });
$("#btn_delete").click(function(){
$("#btn_delete").click(function() {
if ( confirm( "삭제 하시겠습니까?" ) != true ) return;// 202407 삭제 confirm
if ( confirm( "삭제하시겠습니까?" ) != true ) return;
var postData = $('#ajaxForm').serializeArray(); var postData = $('#ajaxForm').serializeArray();
postData.push({ name: "cmd" , value:"DELETE"}); postData.push({ name: "cmd" , value:"DELETE"});
$.ajax({ $.ajax({
type: "POST", type : "POST",
url: url, url:url,
data: postData, data:postData,
success: function(args) { success:function(args){
alert("삭제 되었습니다."); alert("삭제 되었습니다.");
goNav(returnUrl);//LIST로 이동 goNav(returnUrl);//LIST로 이동
}, },
error: function(e) { error:function(e){
alert(e.responseText); // alert(e.responseText);
} }
}); });
}); });
$("#btn_previous").click(function(){
$("#btn_previous").click(function() {
goNav(returnUrl);//LIST로 이동 goNav(returnUrl);//LIST로 이동
}); });
$("select[name=bjobBzwkDstcd]").change(function() { $("select[name=bjobBzwkDstcd]").change(function(){
$.ajax({ $.ajax({
type: "POST", type : "POST",
url: url, url:url,
dataType: "json", dataType:"json",
data: { cmd: 'LIST_PROP', data:{ cmd: 'LIST_PROP',
bjobBzwkDstcd : $(this).val(), bjobBzwkDstcd : $(this).val()
bjobMsgDstcd : $('input[name=bjobMsgDstcd]').val() },
}, success:function(json){
success:function(json) { $("#grid")[0].addJSONData(json);
$("#grid")[0].addJSONData(json.propMap); }
$("select[name=bjobInstiDstcd] option").remove();
new makeOptions("CODE","NAME").setObj($("select[name=bjobInstiDstcd]")).setFormat(codeName3OptionFormat).setData(json.InstMap.rows).rendering(); // 대외기관코드
$("select[name=bjobInstiDstcd]").val($("input[name=bjobInstiDstVal]").val());
}
});
});
$("#btn_pop_detail").click(function() {
var popUrl = '<c:url value="/bap/admin/work/messageProcMan.view" />' + '?cmd=POPUP';
var args = new Object();
args['data'] = key;
args['ispop'] = true;
var result = showModal(popUrl, args, 700, 600, function(arg) {
var args = null;
if( arg == null || arg == undefined ) {//chrome
args = this.dialogArguments;
args.returnValue = this.returnValue;
} else {//ie
args = arg;
}
if( !args || !args.returnValue ) return;
}); });
}); });
buttonControl(isDetail); buttonControl(isDetail);
titleControl(isDetail); titleControl(isDetail);
$("#btn_close").click(function() {
window.close();
});
if ( isPopup == 'Y' ) {
$('#btn_delete').hide();
$('#btn_modify').show();
$('#btn_previous').hide();
$('#btn_close').show();
} else {
$('#btn_close').hide();
}
}); });
</script> </script>
</head> </head>
<body> <body>
<div class="right_box"> <div class="right_box">
<div class="content_top"> <div class="content_top">
<ul class="path"> <ul class="path">
<li><a href="#">${rmsMenuPath}</a></li> <li><a href="#">${rmsMenuPath}</a></li>
</ul> </ul>
</div><!-- end content_top --> </div><!-- end content_top -->
<div class="content_middle" id="title"> <div class="content_middle" id="title">
<div class="search_wrap"> <div class="search_wrap">
<img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" status="DETAIL"/> <img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" status="DETAIL"/>
<img src="<c:url value="/img/btn_modify.png"/>" alt="" id="btn_modify" level="W" status="DETAIL,NEW" /> <img src="<c:url value="/img/btn_modify.png"/>" alt="" id="btn_modify" level="W" status="DETAIL,NEW" />
<img src="<c:url value="/img/btn_previous.png"/>" alt="" id="btn_previous" level="R" status="DETAIL,NEW"/> <img src="<c:url value="/img/btn_previous.png"/>" alt="" id="btn_previous" level="R" status="DETAIL,NEW"/>
<img src="<c:url value="/img/btn_close.png"/>" alt="" id="btn_close" level="R" style="display:none;" />
</div> </div>
<div class="title">송수신 파일</div> <div class="title">송수신 파일</div>
<form id="ajaxForm"> <form id="ajaxForm">
<input type="hidden" name="sndrcvFileName" value=" "/>
<input type="hidden" name="sndScriptname" />
<table class="table_row" cellspacing="0"> <table class="table_row" cellspacing="0">
<colgroup>
<col width="15%">
<col width="30%">
<col width="5%">
<col width="15%">
<col width="35%">
</colgroup>
<!-- 공통--> <!-- 공통-->
<tr> <tr>
<th>인터페이스ID *</th> <th style="width:180px;">업무구분코드</th>
<td colspan="2"><input type="text" name="bjobMsgDstcd" /></td> <td><div class="select-style"><select name="bjobBzwkDstcd">
</select></div>
</td>
</tr>
<tr>
<th>BATCH작업메시지구분코드</th><td><input type="text" maxlength="40" name="bjobTranDstcdName" /> </td>
</tr>
<tr>
<th>BATCH작업메시지구분명</th><td><input type="text" name="bjobMsgDsticName" /> </td>
</tr>
<tr>
<th>BATCH작업전문헤더크기</th><td><input type="text" name="bjobTelgmHdrSize" /> </td>
</tr>
<tr>
<th>BATCH작업전문데이터크기</th><td><input type="text" name="bjobTelgmRecSize" /> </td>
</tr>
<tr>
<th>BATCH작업전문트레일러크기</th><td><input type="text" name="bjobTelgmTrailSize" /> </td>
</tr>
<tr>
<th>파일송신사용여부</th>
<td><div class="select-style"><select name="fileSendUseYn">
<option value="1">사용</option>
<option value="0">사용안함</option>
</select></div>
</td>
</tr>
<tr>
<th>파일수신사용여부</th>
<td><div class="select-style"><select name="fileRecvUseYn">
<option value="1">사용</option>
<option value="0">사용안함</option>
</select></div>
</td>
</tr>
<tr>
<th>작업처리 우선순위</th><td><input type="text" name="msgPrcssPrity" /> </td>
</tr>
<tr>
<th>연계시스템 CODE(송신)</th>
<td><div class="select-style"><select name="sysCd"></select></div>
</td>
</tr>
<tr>
<th>연계시스템 CODE(수신)</th>
<td><div class="select-style"><select name="sysCd2"></select></div>
</td>
</tr>
<tr>
<th>APPLICATION CODE</th>
<td>
<!-- <div class="select-style"><select name="uapplCd"></select></div> -->
<input type="text" name="uapplCd" />
</td>
</tr>
<!--
<tr>
<th>업무레벨Lv1</th>
<td><div class="select-style"><select name="bizlevel1"></select></div>
</td>
</tr>
<tr>
<th>업무레벨Lv2</th>
<td><div class="select-style"><select name="bizlevel2"></select></div>
</td>
</tr>
-->
<tr hidden="hidden">
<th>파일명 패턴</th>
<td><div class="select-style"><select name="sndrcvFileName">
<option value=" ">사용안함</option>
<option value="yyyy">YYYY</option>
<option value="yyyyMM">YYYYMM</option>
<option value="MMdd">MMDD</option>
<option value="yyyyMMdd">YYYYMMDD</option>
<option value="001">일련번호</option>
<option value="yyyy_001">YYYY_일련번호</option>
<option value="yyyyMM_001">YYYYMM_일련번호</option>
<option value="MMdd_001">MMDD_일련번호</option>
<option value="yyyyMMdd_001">YYYYMMDD_일련번호</option>
</select></div>
</td>
</tr>
<tr> <!-- hidden="hidden" -->
<th>파일담당자</th><td><input type="text" name="thisMsgChrgIDs" /> </td>
</tr>
<tr>
<th>수신시 알림여부</th>
<td>
<div class="select-style"><select name="recvNotiUseYn">
<option value="1">사용</option>
<option value="0">사용안함</option>
</select></div>
</td>
</tr>
<tr>
<th>당메시지 사용여부 *</th> <th>당메시지 사용여부 *</th>
<td> <td>
<div class="select-style"> <div class="select-style"><select name="thisMsgUseYn">
<select name="thisMsgUseYn">
<option value="1">사용</option> <option value="1">사용</option>
<option value="0">사용안함</option> <option value="0">사용안함</option>
</select> </select></div>
</div>
</td> </td>
</tr> </tr>
<!--
<tr> <tr>
<th>업무구분코드</th> <th>prptyGroupName</th><td><input name="prptyGroupName" /> </td>
<td colspan="2">
<div class="select-style">
<select name="bjobBzwkDstcd"></select>
</div>
</td>
<th>대외기관코드</th>
<td colspan="2">
<input type="hidden" name="bjobInstiDstVal" />
<div class="select-style">
<select name="bjobInstiDstcd"></select>
</div>
</td>
</tr> </tr>
-->
<tr> <tr>
<th>BATCH작업메시지구분코드 *</th> <th>jFlow Job ID</th><td><input type="text" name="intfID" /> </td>
<td colspan="2"><input type="text" maxlength="40" name="bjobTranDstcdName" /></td>
<th>BATCH작업메시지구분명 *</th>
<td><input type="text" name="bjobMsgDsticName" /></td>
</tr> </tr>
<tr> <tr hidden="hidden">
<th>BATCH작업전문헤더크기 *</th> <th>bjobMsgDstcd</th><td><input type="text" name="bjobMsgDstcd" /> </td>
<td colspan="2"><input type="text" name="bjobTelgmHdrSize" /></td>
<th>BATCH작업전문데이터크기 *</th>
<td><input type="text" name="bjobTelgmRecSize" /></td>
</tr> </tr>
<tr>
<th>BATCH작업전문트레일러크기</th>
<td colspan="2"><input type="text" name="bjobTelgmTrailSize" /></td>
<th>BATCH작업주기구분</th>
<td><div class="select-style"><select name="bJobCycleGb"></select></div></td>
</tr>
<tr>
<input type="hidden" name="fileSendUseYn" />
<input type="hidden" name="fileRecvUseYn" />
<th>파일 송/수신 구분</th>
<td colspan="2">
<div class="select-style">
<select name="fileSndRcvGbn">
<option value="S">송신</option>
<option value="R">수신</option>
</select>
</div>
</td>
<th>수신시 알림여부</th>
<td colspan="2">
<div class="select-style">
<select name="recvNotiUseYn">
<option value="1">사용</option>
<option value="0">사용안함</option>
</select>
</div>
</td>
</tr>
<tr>
<th>APPLICATION CODE *</th>
<td colspan="2"><div class="select-style"><select name="uapplCd"></select></div></td>
<!-- <th>파일명 패턴</th>
<td>
<div class="select-style">
<select name="sndrcvFileName">
<option value=" ">사용안함</option>
<option value="yyyy">YYYY</option>
<option value="yyyyMM">YYYYMM</option>
<option value="MMdd">MMDD</option>
<option value="yyyyMMdd">YYYYMMDD</option>
<option value="001">일련번호</option>
<option value="yyyy_001">YYYY_일련번호</option>
<option value="yyyyMM_001">YYYYMM_일련번호</option>
<option value="MMdd_001">MMDD_일련번호</option>
<option value="yyyyMMdd_001">YYYYMMDD_일련번호</option>
</select>
</div>
</td> -->
<th>EAI 인터페이스ID</th>
<td><input type="text" name="intfID" /></td>
</tr>
<tr>
<th>데이터검증여부</th>
<td style="border-right: 0px;">
<div class="select-style">
<select name="dataVrfyYn">
<option value="1">사용</option>
<option value="0">사용안함</option>
</select>
</div>
</td>
<td><img id="btn_pop_detail" src="<c:url value="/img/btn_pop_detail.png" />" class="btn_img" /></td>
<th>작업처리 우선순위</th>
<td><input type="text" name="msgPrcssPrity" /></td>
</tr>
<tr>
<th>처리여부</th>
<td colspan="2">
<div class="select-style">
<select name="procYn">
<option value="1">사용</option>
<option value="0">사용안함</option>
</select>
</div>
</td>
<th>중복횟수</th>
<td><input type="text" name="dupCnt" /></td>
</tr>
<tr>
<th>종결여부</th>
<td colspan="2">
<div class="select-style">
<select name="endYn">
<option value="1">사용</option>
<option value="0">사용안함</option>
</select>
</div>
</td>
<th>종결횟수</th>
<td><input type="text" name="endCnt" /></td>
</tr>
<tr>
<th>파일담당자</th>
<td colspan="4"><input type="text" name="thisMsgChrgIDs" /></td>
</tr>
<!-- <tr>
<th>송신스크립트명</th>
<td colspan="4"><input type="text" name="sndScriptname" /></td>
</tr> -->
</table> </table>
</form> </form>
<div class="table_row_title">프라퍼티 정보</div>
<div class="table_row_title">프라퍼티 정보</div>
<!-- grid --> <!-- grid -->
<table id="grid" ></table> <table id="grid" ></table>
</div><!-- end content_middle --> </div><!-- end content_middle -->
</div><!-- end right_box --> </div><!-- end right_box -->
</body> </body>
</html> </html>
+131 -257
View File
@@ -13,296 +13,170 @@
<jsp:include page="/jsp/common/include/css.jsp"/> <jsp:include page="/jsp/common/include/css.jsp"/>
<jsp:include page="/jsp/common/include/script.jsp"/> <jsp:include page="/jsp/common/include/script.jsp"/>
<script language="javascript" > <script language="javascript" >
var url_excel = '<c:url value="/common/noauth/excel/listGridToExcel.json" />'; function list(url){
function fileupload(e,successcallback,errorcallback) {
var formObj = $(this);
var formURL = formObj.attr("action");
if( window.FormData !== undefined ) // for HTML5 browsers
{
var formData = new FormData(this);
$.ajax({
url: formURL,
type: 'POST',
data: formData,
encType: "multipart/form-data",
contentType: false,
cache: false,
processData: false,
success: function(json, textStatus, jqXHR) {
$("input[name=file]").val("");
if( textStatus == 'success' ) {
alert('정상처리 되었습니다.');
$("#btn_search").click();
} else {
alert('업로드중 에러가 발생하였습니다.');
}
},
error: function(jqXHR, textStatus, errorThrown) {
$("input[name=file]").val("");
if( typeof callback === 'function' ) {
errorcallback(jqXHR, textStatus, errorThrown);
}
}
});
e.preventDefault();
if ( e.unbind ) e.unbind();
} else { //for olden browsers
formObj.append($("<input type='hidden' name='serviceType' value='" + sessionStorage["serviceType"] + "' />"));
//generate a random id
var iframeId = 'unique' + (new Date().getTime());
//create an empty iframe
var iframe = $('<iframe src="javascript:false;" id="' + iframeId + '" name="' + iframeId + '" />');
//hide it
iframe.hide();
//set form target to iframe
formObj.attr('target', iframeId);
formObj.attr('action', '<c:url value="/loader.file" />');
//Add iframe to body
iframe.appendTo('body');
iframe.load(function(e) {
var doc = getDoc(iframe[0]);
var docRoot = doc.body ? doc.body : doc.documentElement;
var data = docRoot.innerHTML;
var k = JSON.parse(data);
$("#grid")[0].addJSONData(k);
$("input[name=file]").val("");
//data is returned from server.
if( typeof callback === 'function' ) {
//successcallback(data);
}
});
}
}
function list(url) {
var gridPostData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로 var gridPostData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로
$('#grid').jqGrid({ $('#grid').jqGrid({
datatype: "json", datatype:"json",
mtype: 'POST', mtype: 'POST',
url: '<c:url value="/bap/admin/work/systemInstMan.json" />', url: '<c:url value="/bap/admin/work/systemInstMan.json" />',
postData: gridPostData, postData : gridPostData,
colNames: [ '대외기관명', colNames:['대외기관명',
'대외기관코드', '대외기관코드',
'업무구분명', '업무구분명',
'업무구분코드', '업무구분코드',
'송신처리규칙코드', '송신처리규칙코드',
'수신처리규칙코드', '수신처리규칙코드',
'파일송신유형', '파일송신유형',
'파일수신유형', '파일수신유형',
'사용여부' '사용여부'
], ],
colModel: [ colModel:[
{ name: 'OSIDINSTINAME' , align: 'left' ,sortable:false }, { name : 'OSIDINSTINAME' , align:'left' ,sortable:false },
{ name: 'OSIDINSTIDSTCD' , align: 'center'}, { name : 'OSIDINSTIDSTCD' , align:'left' },
{ name: 'BJOBBZWKNAME' , align: 'left' }, { name : 'BJOBBZWKNAME' , align:'left' },
{ name: 'BJOBBZWKDSTCD' , align: 'center'}, { name : 'BJOBBZWKDSTCD' , align:'left' },
{ name: 'SENDPRCSSRULECD' , align: 'center'}, { name : 'SENDPRCSSRULECD' , align:'center'},
{ name: 'RECVPRCSSRULECD' , align: 'center'}, { name : 'RECVPRCSSRULECD' , align:'center'},
{ name: 'EAIFILESENDPTRNDSTCD' , align: 'center' , { name : 'EAIFILESENDPTRNDSTCD' , align:'center',
formatter: function (cellvalue) { formatter: function (cellvalue) {
if( cellvalue == 'R' ) { if ( cellvalue == 'R' ) {
return '요구'; return '요구';
} else { } else {
return '응답'; return '응답';
} }
} }
}, },
{ name: 'EAIFILERECVPTRNDSTCD' , align: 'center' , { name : 'EAIFILERECVPTRNDSTCD' , align:'center',
formatter: function (cellvalue) { formatter: function (cellvalue) {
if( cellvalue == 'R' ) { if ( cellvalue == 'R' ) {
return '요구'; return '요구';
} else { } else {
return '응답'; return '응답';
} }
} }
}, },
{ name: 'THISMSGUSEYN' , align: 'center' , { name : 'THISMSGUSEYN' , align:'center',
formatter: function (cellvalue) { formatter: function (cellvalue) {
if( cellvalue == '1' ) { if ( cellvalue == '1' ) {
return '사용'; return '사용';
} else { } else {
return '<span style="color:red">사용안함</span>'; return '<span style="color:red">사용안함</span>';
} }
} }
} }
], ],
jsonReader: { jsonReader: {
repeatitems:false repeatitems:false
}, },
pager: $('#pager'), pager : $('#pager'),
page: '${param.page}', page : '${param.page}',
rowNum: '${rmsDefaultRowNum}', rowNum : '${rmsDefaultRowNum}',
autoheight: true, autoheight: true,
height: $("#container").height(), height: $("#container").height(),
autowidth: true, autowidth: true,
viewrecords: true, viewrecords: true,
multiselect: true, rowList : eval('[${rmsDefaultRowList}]'),
rowList: eval('[${rmsDefaultRowList}]'), gridComplete:function (d){
gridComplete: function (d) {
var colModel = $(this).getGridParam("colModel"); var colModel = $(this).getGridParam("colModel");
for( var i = 0; i < colModel.length; i++ ) { for(var i = 0 ; i< colModel.length; i++){
$(this).setColProp(colModel[i].name, {sortable: false}); //그리드 헤더 화살표 삭제(정렬X) $(this).setColProp(colModel[i].name, {sortable : false}); //그리드 헤더 화살표 삭제(정렬X)
} }
},
},
ondblClickRow: function(rowId) { ondblClickRow: function(rowId) {
var rowData = $(this).getRowData(rowId); var rowData = $(this).getRowData(rowId);
var bjobBzwkDstcd = rowData['BJOBBZWKDSTCD'].trim(); var bjobBzwkDstcd = rowData['BJOBBZWKDSTCD'].trim();
var osidInstiDstcd = rowData['OSIDINSTIDSTCD'].trim(); var osidInstiDstcd = rowData['OSIDINSTIDSTCD'].trim();
var url = '<c:url value="/bap/admin/work/systemInstMan.view" />'; var url = '<c:url value="/bap/admin/work/systemInstMan.view" />';
url += '?cmd=DETAIL'; url = url + '?cmd=DETAIL';
url += '&page=' + $(this).getGridParam("page"); url = url + '&page='+$(this).getGridParam("page");
url += '&menuId=' + '${param.menuId}'; url = url + '&menuId='+'${param.menuId}';
url += '&returnUrl=' + getReturnUrl(); url = url + '&returnUrl='+getReturnUrl();
url += '&bjobBzwkDstcd=' + bjobBzwkDstcd; url = url + '&bjobBzwkDstcd='+bjobBzwkDstcd;
url += '&osidInstiDstcd=' + osidInstiDstcd; url = url + '&osidInstiDstcd='+osidInstiDstcd;
url += '&' + getSearchUrl(); url = url + '&'+getSearchUrl();
//검색값 //검색값
goNav(url); goNav(url);
} }
}); });
} }
$(document).ready(function() { $(document).ready(function() {
resizeJqGridWidth('grid', 'title', '1000'); resizeJqGridWidth('grid','title','1000');
var url ='<c:url value="/bap/admin/work/systemInstMan.json" />'; var url ='<c:url value="/bap/admin/work/systemInstMan.json" />';
list(url); list(url);
$("#btn_search").click(function() { $("#btn_search").click(function(){
var postData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로 var postData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로
$("#grid").setGridParam({url:url, postData: postData,page:"1" }).trigger("reloadGrid"); $("#grid").setGridParam({url:url, postData: postData,page:"1" }).trigger("reloadGrid");
}); });
$("#btn_new").click(function() { $("#btn_new").click(function(){
var url = '<c:url value="/bap/admin/work/systemInstMan.view"/>'; var url = '<c:url value="/bap/admin/work/systemInstMan.view"/>';
url += '?cmd=DETAIL'; url = url + '?cmd=DETAIL';
url += '&page=' + $("#grid").getGridParam("page"); url = url + '&page='+$("#grid").getGridParam("page");
url += '&returnUrl=' + getReturnUrl(); url = url + '&returnUrl='+getReturnUrl();
url += '&menuId=' + '${param.menuId}'; url = url + '&menuId='+'${param.menuId}';
//검색값 //검색값
url += '&' + getSearchUrl(); url = url + '&'+getSearchUrl();
goNav(url); goNav(url);
}); });
$("input[name^=search]").keydown(function(key) { $("input[name^=search]").keydown(function(key){
if( key.keyCode == 13 ) { if (key.keyCode == 13){
$("#btn_search").click(); $("#btn_search").click();
} }
}); });
$("#btn_excel").click(function(event) {
event.stopPropagation(); // Do not propagate the event.
// Create an object that will manage to download the file.
var merge = new Array();
gridToExcelSubmit(url_excel, "LIST_GRID_TO_EXCEL", $("#grid"), $("#ajaxForm"), "배치 세부 기관 관리", merge);
return false;
});
$("#btn_download").click(function() {
let selectedVal = "";
const rowIds = $("#grid").getGridParam("selarrrow");
rowIds.forEach(rowId => {
selectedVal += "," + $("#grid").getRowData(rowId).BJOBBZWKDSTCD + '_' + $("#grid").getRowData(rowId).OSIDINSTIDSTCD;
});
if( selectedVal != "" ) selectedVal = selectedVal.substring(1);
var url ='<c:url value="/loader.do" />';
url += '?cmd=systemInstMan';
url += '&control=download';
url += '&serviceType=' + sessionStorage["serviceType"];
url += '&fileName=systemInstMan';
url += '&selectedVal=' + selectedVal;
url += '&' + getSearchUrl();
goNav(url);
});
$("#multiform").on('submit', fileupload);
$('#btn_upload').click(function() {
if( confirm( "동일한 이름의 경우 기존내용을 수정합니다.\n\n업로드 하시겠습니까?" ) != true ) return;
if( window.FormData !== undefined ) {
$("input[name=file]").click();
} else {
if( $("input[name=file]").val() == "" ) return;
$("#multiform").submit();
}
});
if( window.FormData !== undefined ) {
$("input[name=file]").change(function(ev) {
var filename = $(this).val().split('\\').pop();
if( !filename.startsWith('systemInstMan') ) {
alert("배치 세부기관 관리 JSON 파일을 선택하십시오.\n\n[파일명 : systemInstMan.json]")
return false;
}
if( filename == "" ) return;
else $("#multiform").submit();
});
}
if( window.FormData !== undefined ) {
$("input[name=file]").hide();
} else {
$("input[name=file]").show();
}
buttonControl(); buttonControl();
$("input[name=searchOsidInstiName]").val()
}); });
</script> </script>
</head> </head>
<body> <body>
<div class="right_box"> <div class="right_box">
<div class="content_top"> <div class="content_top">
<ul class="path"> <ul class="path">
<li><a href="#">${rmsMenuPath}</a></li> <li><a href="#">${rmsMenuPath}</a></li>
</ul> </ul>
</div><!-- end content_top --> </div><!-- end content_top -->
<div class="content_middle" id="title"> <div class="content_middle">
<form id="multiform" method="POST" enctype="multipart/form-data" action="<c:url value="/loader.file"/>"> <div class="search_wrap">
<div class="search_wrap"> <img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" />
<input type="file" id="file" name="file" style="display:inline-block"/> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
<input type="hidden" name="cmd" value="systemInstMan"/> </div>
<input type="hidden" name="control" value="upload"/> <div class="title">시스템 대외기관 관리<span class="tooltip">일괄 전송에서 사용하는 대외 기관구분 코드를 관리 하는 화면입니다</span></div>
<img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R"/>
<img src="<c:url value="/img/btn_upload.png"/>" alt="" id="btn_upload" level="W" /> <table class="search_condition" cellspacing=0;>
<img src="<c:url value="/img/btn_download.png"/>" alt="" id="btn_download" level="R" /> <tbody>
<img src="<c:url value="/img/btn_new.png"/>" alt="" id="btn_new" level="W" /> <tr>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <th style="width:80px;">대외기관명</th>
</div> <td><input type="text" name="searchOsidInstiName" value="${param.searchOsidInstiName}"></td>
</form> <th style="width:100px;">대외기관코드</th>
<div class="title">배치 세부 기관 관리<span class="tooltip">일괄 전송에서 사용하는 배치 세부 기관 코드를 관리 하는 화면입니다</span></div> <td><input type="text" name="searchOsidInstiDstcd" value="${param.searchOsidInstiDstcd}"></td>
<th style="width:100px;">업무구분명</th>
<table class="search_condition" cellspacing=0;> <td><input type="text" name="searchBjobBzwkName" value="${param.searchBjobBzwkName}"></td>
<tbody> </tr>
<tr> <tr>
<th style="width:180px;">배치 세부 기관 명</th> <th style="width:80px;">업무구분코드</th>
<td><input type="text" name="searchOsidInstiName" value="${param.searchOsidInstiName}"></td> <td><input type="text" name="searchBjobBzwkDstcd" value="${param.searchBjobBzwkDstcd}"></td>
<th style="width:180px;">배치 세부 기관 코드</th> <!-- 광주은행 U2L 요구사항 2023.11.28 -->
<td><input type="text" name="searchOsidInstiDstcd" value="${param.searchOsidInstiDstcd}"></td> <th style="width:100px;">송신처리규칙코드</th>
<th style="width:180px;">배치 기관명</th> <td><input type="text" name="searchSendPrcssRulecd" value="${param.searchSendPrcssRulecd}"></td>
<td><input type="text" name="searchBjobBzwkName" value="${param.searchBjobBzwkName}"></td> <th style="width:100px;">수신처리규칙코드</th>
</tr> <td><input type="text" name="searchRecvPrcssRulecd" value="${param.searchRecvPrcssRulecd}"></td>
</tbody> <!-- 광주은행 U2L 요구사항 2023.11.28 -->
</table>
<table id="grid" ></table> </tr>
<div id="pager"></div> </tbody>
</div><!-- end content_middle --> </table>
</div><!-- end right_box --> <table id="grid" ></table>
</body> <div id="pager"></div>
</div><!-- end content_middle -->
</div><!-- end right_box -->
</body>
</html> </html>
@@ -116,7 +116,7 @@ function init(key1, key2) {
getBjobBzwkDstcd(key1, key2); getBjobBzwkDstcd(key1, key2);
getBjobBzwkPrcssDstcd(key1, key2); getBjobBzwkPrcssDstcd(key1, key2);
getAdaptorGroup(key1, key2); getAdaptorGroup(key1, key2);
setSearchable(selectName); // 콤보에 searchable 설정 //setSearchable(selectName); // 콤보에 searchable 설정
} }
function getBjobBzwkDstcd(key1, key2) { function getBjobBzwkDstcd(key1, key2) {
@@ -178,7 +178,7 @@ function getAdaptorGroup(key1, key2) {
} }
}, },
error: function(e) { error: function(e) {
alert(e.responseText); //alert(e.responseText);
} }
}); });
} }
@@ -224,7 +224,7 @@ function detail(key1,key2) {
$("#grid")[0].addJSONData(data); $("#grid")[0].addJSONData(data);
}, },
error: function(e) { error: function(e) {
alert(e.responseText); //alert(e.responseText);
} }
}); });
} }
@@ -245,7 +245,7 @@ function setRqstRspnsDstcd() {
$("select[name=adptrBzwkName]").val(sysLnkgList["ADPTRBZWKNAME"]); $("select[name=adptrBzwkName]").val(sysLnkgList["ADPTRBZWKNAME"]);
}, },
error: function(e) { error: function(e) {
alert(e.responseText); //alert(e.responseText);
} }
}); });
} }
@@ -214,7 +214,7 @@ $(document).ready(function() {
</div><!-- end content_top --> </div><!-- end content_top -->
<div class="content_middle" id="content_middle"> <div class="content_middle" id="content_middle">
<div class="search_wrap"> <div class="search_wrap">
<img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R"/> <%-- <img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R"/> --%>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
</div> </div>
<div class="title">진행작업 관리</div> <div class="title">진행작업 관리</div>
File diff suppressed because it is too large Load Diff
@@ -13,97 +13,96 @@
<jsp:include page="/jsp/common/include/css.jsp"/> <jsp:include page="/jsp/common/include/css.jsp"/>
<jsp:include page="/jsp/common/include/script.jsp"/> <jsp:include page="/jsp/common/include/script.jsp"/>
<script language="javascript" > <script language="javascript" >
var url = '<c:url value="/bap/transaction/transactionTraceMan.json" />';
var url_view = '<c:url value="/bap/transaction/transactionTraceMan.view" />';
var url_excel = '<c:url value="/common/noauth/excel/listGridToExcel.json" />';
function init( callback ) { var url = '<c:url value="/bap/transaction/transactionTraceMan.json" />';
var url_view = '<c:url value="/bap/transaction/transactionTraceMan.view" />';
// $("input[name=searchStartYYYYMMDD],input[name=searchEndYYYYMMDD]").inputmask({ alias: "datetime",autoUnmask: true, inputFormat : "yyyy-mm-dd",outputFormat : "yyyymmdd" });
// $("input[name=searchStartHHMM],input[name=searchEndHHMM]").inputmask({ alias: "datetime",autoUnmask: true, inputFormat : "HH:MM:ss",outputFormat : "HHMMss" });
$("input[name=searchStartYYYYMMDD],input[name=searchEndYYYYMMDD]").inputmask("yyyy-mm-dd",{'autoUnmask':true}); function init( callback ) {
$("input[name=searchStartHHMM],input[name=searchEndHHMM]").inputmask("hh:mm:ss",{'autoUnmask':true});
/* $("input[name=searchStartYYYYMMDD],input[name=searchEndYYYYMMDD]").inputmask({ alias: "datetime",autoUnmask: true, inputFormat : "yyyy-mm-dd",outputFormat : "yyyymmdd" });
$("input[name=searchStartHHMM],input[name=searchEndHHMM]").inputmask({ alias: "datetime",autoUnmask: true, inputFormat : "HH:MM:ss",outputFormat : "HHMMss" }); */
$("input[name=searchStartYYYYMMDD],input[name=searchEndYYYYMMDD]").inputmask("yyyy-mm-dd",{'autoUnmask':true});
var searchStartYYYYMMDD = "${param.searchStartYYYYMMDD}"; $("input[name=searchStartHHMM],input[name=searchEndHHMM]").inputmask("hh:mm:ss",{'autoUnmask':true});
var searchEndYYYYMMDD = "${param.searchEndYYYYMMDD}"; var searchStartYYYYMMDD = "${param.searchStartYYYYMMDD}";
var searchStartHHMM = "${param.searchStartHHMM}"; var searchEndYYYYMMDD = "${param.searchEndYYYYMMDD}";
var searchEndHHMM = "${param.searchEndHHMM}"; var searchStartHHMM = "${param.searchStartHHMM}";
var searchEndHHMM = "${param.searchEndHHMM}";
if ( searchStartYYYYMMDD == null || searchStartYYYYMMDD == '') {
$("input[name=searchStartYYYYMMDD]").val(getToday()); if ( searchStartYYYYMMDD == null || searchStartYYYYMMDD == ''){
} $("input[name=searchStartYYYYMMDD]").val(getToday());
}
if ( searchEndYYYYMMDD == null || searchEndYYYYMMDD == '') {
$("input[name=searchEndYYYYMMDD]").val(getToday()); if ( searchEndYYYYMMDD == null || searchEndYYYYMMDD == ''){
} $("input[name=searchEndYYYYMMDD]").val(getToday());
}
if ( searchStartHHMM == null || searchStartHHMM == '') {
$("input[name=searchStartHHMM]").val('000000'); if ( searchStartHHMM == null || searchStartHHMM == ''){
} $("input[name=searchStartHHMM]").val('000000');
}
if ( searchEndHHMM == null || searchEndHHMM == '') {
$("input[name=searchEndHHMM]").val('235959'); if ( searchEndHHMM == null || searchEndHHMM == ''){
} $("input[name=searchEndHHMM]").val('235959');
}
$.ajax({
type : "POST", $.ajax({
url:url, type : "POST",
dataType:"json", url:url,
data:{cmd: 'LIST_INIT_COMBO'}, dataType:"json",
success:function(json) { data:{cmd: 'LIST_INIT_COMBO'},
new makeOptions("CODE","NAME").setObj($("select[name=searchBjobBzwkDstcd]")).setNoValueInclude(true).setNoValue('','전체').setData(json.bjobBzwkDstcd).rendering(); success:function(json){
$("select[name=searchEaiBzwkDstcd]").searchable(); new makeOptions("CODE","NAME").setObj($("select[name=searchBjobBzwkDstcd]")).setNoValueInclude(true).setNoValue('','전체').setData(json.bjobBzwkDstcd).rendering();
putSelectFromParam(); $("select[name=searchEaiBzwkDstcd]").searchable();
if (typeof callback === 'function') { putSelectFromParam();
callback(); if (typeof callback === 'function') {
callback();
}
},
error:function(e){
// alert(e.responseText);
} }
}, });
error:function(e){
alert(e.responseText); }
}
});
}
function detail() { function detail(){
var start = $("input[name=searchStartYYYYMMDD]").val().replace("-","")+$("input[name=searchStartHHMM]").val().replace(":",""); var start = $("input[name=searchStartYYYYMMDD]").val().replace("-","")+$("input[name=searchStartHHMM]").val().replace(":","");
var end = $("input[name=searchEndYYYYMMDD]").val().replace("-","")+$("input[name=searchEndHHMM]").val().replace(":",""); var end = $("input[name=searchEndYYYYMMDD]").val().replace("-","")+$("input[name=searchEndHHMM]").val().replace(":","");
$("input[name=searchStartTime]").val(start); $("input[name=searchStartTime]").val(start);
$("input[name=searchEndTime]").val(end); $("input[name=searchEndTime]").val(end);
var postData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로
$("#grid").setGridParam({ url:url,postData: postData }).trigger("reloadGrid");
}
function resend(bjobDmndMsgID, bjobDmndSubMsgID, fileTrsmtLogID, sndRecvFileName){
if ( confirm( "해당 건을 재 전송 하시겠습니까?" ) != true ){
return;
}
var postData = new Array();
postData.push({ name: "cmd" , value:"TRANSACTION_RESEND"});
postData.push({ name: "bjobDmndMsgID" , value:bjobDmndMsgID});
postData.push({ name: "bjobDmndSubMsgID" , value:bjobDmndSubMsgID});
postData.push({ name: "fileTrsmtLogID" , value:fileTrsmtLogID});
postData.push({ name: "sndRecvFileName" , value:sndRecvFileName});
$.ajax({
type : "POST",
url:url,
data:postData,
success:function(args){
debugger;
$("#grid").trigger("reloadGrid");
alert( args.result );
},
error:function(e){
// alert(e.responseText);
}
});
}
var postData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로 $(document).ready(function() {
$("#grid").setGridParam({ url:url,postData: postData }).trigger("reloadGrid");
}
function resend(bjobDmndMsgID, bjobDmndSubMsgID, fileTrsmtLogID, sndRecvFileName, bjobMsgDstcd) {
if ( confirm( "해당 건을 재 전송 하시겠습니까?" ) != true ) {
return;
}
var postData = new Array();
postData.push({ name: "cmd" , value:"TRANSACTION_RESEND"});
postData.push({ name: "bjobDmndMsgID" , value:bjobDmndMsgID});
postData.push({ name: "bjobDmndSubMsgID" , value:bjobDmndSubMsgID});
postData.push({ name: "fileTrsmtLogID" , value:fileTrsmtLogID});
postData.push({ name: "sndRecvFileName" , value:sndRecvFileName});
postData.push({ name: "bjobMsgDstcd" , value:bjobMsgDstcd});
$.ajax({
type : "POST",
url:url,
data:postData,
success:function(args){
$("#grid").trigger("reloadGrid");
alert( args.result );
},
error:function(e){
alert(e.responseText);
}
});
}
$(document).ready(function() {
init( detail); init( detail);
$('#grid').jqGrid({ $('#grid').jqGrid({
datatype:"json", datatype:"json",
@@ -114,7 +113,6 @@ $(document).ready(function() {
'SUBUUID', 'SUBUUID',
'전송로그ID', '전송로그ID',
'프레임웍구분', '프레임웍구분',
'인터페이스ID',
'업무구분', '업무구분',
'기관명', '기관명',
'파일명', '파일명',
@@ -131,7 +129,6 @@ $(document).ready(function() {
{ name : 'BJOBDMNDSUBMSGID' , align : 'left' , hidden:true }, { name : 'BJOBDMNDSUBMSGID' , align : 'left' , hidden:true },
{ name : 'FILETRSMTLOGID' , align : 'left' , hidden:true }, { name : 'FILETRSMTLOGID' , align : 'left' , hidden:true },
{ name : 'FRAMEWORKGB' , align : 'center' , width:40 }, { name : 'FRAMEWORKGB' , align : 'center' , width:40 },
{ name : 'BJOBMSGDSTCD' , align : 'left' , width:60 },
{ name : 'BJOBBZWKNAME' , align : 'left' , width:60 }, { name : 'BJOBBZWKNAME' , align : 'left' , width:60 },
{ name : 'OSIDINSTINAME' , align : 'left' , width:60 }, { name : 'OSIDINSTINAME' , align : 'left' , width:60 },
{ name : 'SNDRCVFILENAME' , align : 'left' , width:60 }, { name : 'SNDRCVFILENAME' , align : 'left' , width:60 },
@@ -147,6 +144,7 @@ $(document).ready(function() {
return ''; return '';
} }
} }
}, },
{ name : 'FILETRSMTSTARTHMS' , align:'center' , width:'80' , formatter: timeStampFormat }, { name : 'FILETRSMTSTARTHMS' , align:'center' , width:'80' , formatter: timeStampFormat },
{ name : 'FILETRSMTENDHMS' , align:'center' , width:'80' , formatter: timeStampFormat }, { name : 'FILETRSMTENDHMS' , align:'center' , width:'80' , formatter: timeStampFormat },
@@ -194,13 +192,15 @@ $(document).ready(function() {
url2 = url2 + "&bjobDmndSubMsgID=" + bjobDmndSubMsgID; url2 = url2 + "&bjobDmndSubMsgID=" + bjobDmndSubMsgID;
goNav(url2); goNav(url2);
}, },
loadComplete:function (d) { loadComplete:function (d){
var colModel = $(this).getGridParam("colModel"); var colModel = $(this).getGridParam("colModel");
for(var i = 0 ; i< colModel.length; i++){ for(var i = 0 ; i< colModel.length; i++){
$(this).setColProp(colModel[i].name, {sortable : false}); $(this).setColProp(colModel[i].name, {sortable : false});
} }
},
gridComplete: function() { },
gridComplete: function(){
debugger;
var ids = $(this).getDataIDs(); var ids = $(this).getDataIDs();
for(var i=0;i<ids.length;i++){ for(var i=0;i<ids.length;i++){
var cl = ids[i]; var cl = ids[i];
@@ -209,20 +209,19 @@ $(document).ready(function() {
var bjobDmndSubMsgID = rowData['BJOBDMNDSUBMSGID']; var bjobDmndSubMsgID = rowData['BJOBDMNDSUBMSGID'];
var fileTrsmtLogID = rowData['FILETRSMTLOGID']; var fileTrsmtLogID = rowData['FILETRSMTLOGID'];
var sndRecvFileName = rowData['SNDRCVFILENAME']; var sndRecvFileName = rowData['SNDRCVFILENAME'];
var bjobMsgDstcd = rowData['BJOBMSGDSTCD'];
var sndRcv = rowData['SNDRCV']; var sndRcv = rowData['SNDRCV'];
if ( sndRcv == '송신' || fileTrsmtLogID.trim() != '' ) { if ( sndRcv == '송신' || fileTrsmtLogID.trim() != '' ){
var be = "<input style='height:22px;width:60px;' type='button' value='재전송' onclick=\"resend('"+bjobDmndMsgID+"','"+bjobDmndSubMsgID+"','"+fileTrsmtLogID+"','"+sndRecvFileName+"','"+bjobMsgDstcd+"');\" />"; var be = "<input style='height:22px;width:60px;' type='button' value='재전송' onclick=\"resend('"+bjobDmndMsgID+"','"+bjobDmndSubMsgID+"','"+fileTrsmtLogID+"','"+sndRecvFileName+"');\" />";
$(this).setRowData(ids[i],{RESEND:be}); $(this).setRowData(ids[i],{RESEND:be});
} }
} }
} }
}); });
resizeJqGridWidth('grid','content_middle','1000'); resizeJqGridWidth('grid','content_middle','1000');
$("#btn_search").click(function() { $("#btn_search").click(function(){
var start = $("input[name=searchStartYYYYMMDD]").val().replace("-","")+$("input[name=searchStartHHMM]").val().replace(":",""); var start = $("input[name=searchStartYYYYMMDD]").val().replace("-","")+$("input[name=searchStartHHMM]").val().replace(":","");
var end = $("input[name=searchEndYYYYMMDD]").val().replace("-","")+$("input[name=searchEndHHMM]").val().replace(":",""); var end = $("input[name=searchEndYYYYMMDD]").val().replace("-","")+$("input[name=searchEndHHMM]").val().replace(":","");
$("input[name=searchStartTime]").val(start); $("input[name=searchStartTime]").val(start);
@@ -231,106 +230,99 @@ $(document).ready(function() {
$("#grid").setGridParam({ postData: postData ,page : "1" }).trigger("reloadGrid"); $("#grid").setGridParam({ postData: postData ,page : "1" }).trigger("reloadGrid");
}); });
$("input[name^=search]").keydown(function(key) { $("input[name^=search]").keydown(function(key){
if (key.keyCode == 13){ if (key.keyCode == 13){
$("#btn_search").click(); $("#btn_search").click();
} }
}); });
$("#btn_excel").click(function(event) {
event.stopPropagation(); // Do not propagate the event.
// Create an object that will manage to download the file.
var merge = new Array();
gridToExcelSubmit(url_excel, "LIST_GRID_TO_EXCEL", $("#grid"), $("#ajaxForm"), "거래 추적", merge);
return false;
});
buttonControl(); buttonControl();
}); });
</script> </script>
</head> </head>
<body> <body>
<div class="right_box"> <div class="right_box">
<div class="content_top"> <div class="content_top">
<ul class="path"> <ul class="path">
<li><a href="#">${rmsMenuPath}</a></li> <li><a href="#">${rmsMenuPath}</a></li>
</ul> </ul>
</div><!-- end content_top --> </div><!-- end content_top -->
<div class="content_middle" id="content_middle"> <div class="content_middle" id="content_middle">
<div class="search_wrap"> <div class="search_wrap">
<img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R"/> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> </div>
</div> <div class="title">거래 추적</div>
<div class="title">거래 추적</div>
<table class="search_condition" cellspacing=0;>
<table class="search_condition" cellspacing=0;> <tbody>
<tbody> <tr>
<tr> <th style="width:100px;">프레임웍구분</th>
<th style="width:100px;">프레임웍구분</th> <td>
<td> <div class="select-style">
<div class="select-style"> <select name="searchFrameWorkGb" value="${param.searchFrameWorkGb}">
<select name="searchFrameWorkGb" value="${param.searchFrameWorkGb}"> <option value="2">전체</option>
<option value="2">전체</option> <option value="0">내부</option>
<option value="0">내부</option> <option value="1">대외</option>
<option value="1">대외</option> </select>
</select> </div><!-- end.select-style -->
</div><!-- end.select-style --> </td>
</td> <th style="width:100px;">업무구분명</th>
<th style="width:100px;">업무구분명</th> <td>
<td> <div class="select-style">
<div class="select-style"> <select name="searchBjobBzwkDstcd" value="${param.searchBjobBzwkDstcd}">
<select name="searchBjobBzwkDstcd" value="${param.searchBjobBzwkDstcd}"> </select>
</select> </div>
</div> </td>
</td> <th style="width:100px;">송수신구분</th>
<th style="width:100px;">송수신구분</th> <td>
<td> <div class="select-style">
<div class="select-style"> <select name="searchSndRcv" value="${param.searchSndRcv}">
<select name="searchSndRcv" value="${param.searchSndRcv}"> <option value="A">전체</option>
<option value="A">전체</option> <option value="S">송신</option>
<option value="S">신</option> <option value="R">신</option>
<option value="R">수신</option> </select>
</select> </div>
</div> </td>
</td> <th style="width:100px;">상태</th>
<th style="width:100px;">상태</th> <td>
<td> <div class="select-style">
<div class="select-style"> <select name="searchThisStgePrcssRsultCd" value="${param.searchThisStgePrcssRsultCd}">
<select name="searchThisStgePrcssRsultCd" value="${param.searchThisStgePrcssRsultCd}"> <option value="">전체</option>
<option value="">전체</option> <option value="T">정상</option>
<option value="T">정상</option> <option value="E">에러</option>
<option value="E">에러</option> <option value="S">전송중</option>
<option value="S">전송중</option> </select>
</select> </div>
</div> </td>
</td> </tr>
</tr> <tr>
<tr> <th style="width:100px;">파일명</th>
<th style="width:100px;">파일명</th> <td>
<td> <input type="text" name="searchSndrcvFileName" value="${param.searchSndrcvFileName}">
<input type="text" name="searchSndrcvFileName" value="${param.searchSndrcvFileName}"> </td>
</td> <th style="width:100px;">기관명</th>
<th style="width:100px;">기관명</th> <td>
<td> <input type="text" name="searchOsidInstiName" value="${param.searchOsidInstiName}">
<input type="text" name="searchOsidInstiName" value="${param.searchOsidInstiName}"> </td>
</td> <th style="width:100px;">거래기간</th>
<th style="width:100px;">거래기간</th> <td colspan="3">
<td colspan="3"> <input type="text" name="searchStartYYYYMMDD" maxlength="10" value="" size="10" style="width:80px;">
<input type="text" name="searchStartYYYYMMDD" maxlength="10" value="" size="10" style="width:80px;"> <input type="text" name="searchStartHHMM" maxlength="8" value="" size="8" style="width:80px;"> ~
<input type="text" name="searchStartHHMM" maxlength="8" value="" size="8" style="width:80px;"> ~ <input type="text" name="searchEndYYYYMMDD" maxlength="10" value="" size="10" style="width:80px;">
<input type="text" name="searchEndYYYYMMDD" maxlength="10" value="" size="10" style="width:80px;"> <input type="text" name="searchEndHHMM" maxlength="8" value="" size="8" style="width:80px;">
<input type="text" name="searchEndHHMM" maxlength="8" value="" size="8" style="width:80px;"> <input type="hidden" name="searchStartTime" value="20170201000000">
<input type="hidden" name="searchStartTime" value="20170201000000"> <input type="hidden" name="searchEndTime" value="20170201235959">
<input type="hidden" name="searchEndTime" value="20170201235959"> </td>
</td> </tr>
</tr> </tbody>
</tbody> </table>
</table>
<table id="grid" ></table> <table id="grid" ></table>
<div id="pager"></div> <div id="pager"></div>
</div><!-- end content_middle --> </div><!-- end content_middle -->
</div><!-- end right_box --> </div><!-- end right_box -->
</body> </body>
</html> </html>
@@ -144,7 +144,7 @@ $(document).ready(function() {
autowidth: true, autowidth: true,
viewrecords: true, viewrecords: true,
gridview: true, gridview: true,
multiselect: true, /* multiselect: true, */
rowList: eval('[${rmsDefaultRowList}]'), rowList: eval('[${rmsDefaultRowList}]'),
gridComplete: function (d) { gridComplete: function (d) {
var colModel = $(this).getGridParam("colModel"); var colModel = $(this).getGridParam("colModel");
@@ -250,8 +250,8 @@ $(document).ready(function() {
</div><!-- end content_top --> </div><!-- end content_top -->
<div class="content_middle" id="content_middle"> <div class="content_middle" id="content_middle">
<div class="search_wrap"> <div class="search_wrap">
<img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R"/> <%-- <img src="<c:url value="/img/btn_excel.png"/>" id="btn_excel" level="R"/>
<img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" status="DETAIL"/> <img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" status="DETAIL"/> --%>
<img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" /> <img src="<c:url value="/img/btn_search.png"/>" alt="" id="btn_search" level="R" />
</div> </div>
<div class="title">작업대기 관리</div> <div class="title">작업대기 관리</div>
+17 -29
View File
@@ -86,30 +86,33 @@
$("#loginForm").submit(); $("#loginForm").submit();
} }
function changePwd(){ function changePwd(){
if ($("input[name=userId]").val() == null || $("input[name=userId]").val().length == 0 ){ if ($("input[name=resetUserId]").val() == null || $("input[name=resetUserId]").val().length == 0 ){
alert("<%= localeMessage.getString("login.checkid") %>"); alert("<%= localeMessage.getString("login.checkid") %>");
$("input[name=userId]").trigger("focus"); $("input[name=resetUserId]").trigger("focus");
return; return;
} }
if ($("input[name=password]").val() == null || $("input[name=password]").val().trim().length == 0 ){ if ($("input[name=resetPassword]").val() == null || $("input[name=resetPassword]").val().trim().length == 0 ){
alert("<%= localeMessage.getString("login.checkpwd1") %>"); alert("<%= localeMessage.getString("login.checkpwd1") %>");
$("input[name=password]").trigger("focus"); $("input[name=resetPassword]").trigger("focus");
return; return;
} }
if ($("input[name=password]").length == 0){ if ($("input[name=changePassword]").val() == null || $("input[name=changePassword]").val().trim().length == 0 ){
alert("<%= localeMessage.getString("login.checkpwd2") %>"); alert("<%= localeMessage.getString("login.checkpwd2") %>");
$("input[name=changePassword]").trigger("focus");
return ; return ;
} }
if ($("input[name=changePassword]").length == 0){ if ($("input[name=confirmPassword]").val() == null || $("input[name=confirmPassword]").val().trim().length == 0 ){
alert("<%= localeMessage.getString("login.checkpwd3") %>"); alert("<%= localeMessage.getString("login.checkpwd3") %>");
return ; return ;
} }
if ($("input[name=confirmPassword]").val() != $("input[name=changePassword]").val()){ if ($("input[name=confirmPassword]").val() != $("input[name=confirmPassword]").val()){
alert("<%= localeMessage.getString("login.checkpwd4") %>"); alert("<%= localeMessage.getString("login.checkpwd4") %>");
$("input[name=confirmPassword]").trigger("focus");
return ; return ;
} }
if ($("input[name=userId]").val() == $("input[name=changePassword]").val()){ if ($("input[name=resetUserId]").val() == $("input[name=changePassword]").val()){
alert("<%= localeMessage.getString("login.checkpwd5") %>"); alert("<%= localeMessage.getString("login.checkpwd5") %>");
$("input[name=changePassword]").trigger("focus");
return ; return ;
} }
@@ -121,21 +124,6 @@
--%> --%>
$("form").submit(); $("form").submit();
} }
function openPwdChgWindow() {
<%
if(sysMode.equals("T") || sysMode.equals("D")) {
%>
windowOpen("http://ssodev.kbankwithu.com:7010", "PopupWindow", 1024, 768);
<%
} else {
%>
windowOpen("https://ssoap.kbankwithu.com/nls3/clientLogin.jsp", "PopupWindow", 1024, 768);
<%
}
%>
}
$(document).ready(function() { $(document).ready(function() {
$("input[name=userId]").keydown(function(event){ $("input[name=userId]").keydown(function(event){
@@ -215,18 +203,18 @@
<input type="button" id ="btn_login" class="form-control btn btn-primary rounded submit px-3" value="Login"> <input type="button" id ="btn_login" class="form-control btn btn-primary rounded submit px-3" value="Login">
</div> </div>
<div style="text-align: right !important;" class="form-group"> <div style="text-align: right !important;" class="form-group">
<a style="font-size: 12px !important;" href="#pwdChgSsoModal" onclick="openPwdChgWindow()" >Password Change</a> <a style="font-size: 12px !important;" href="#pwdChgModal" data-toggle="modal" >Password Change</a>
<!-- <a style="font-size: 12px !important;" href="#pwdChgModal" data-toggle="modal" >Password Change</a> -->
</div> </div>
<p style="color:red;"><%=resultMsg %></p> <p style="color:red;"><%=resultMsg %></p>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<%-- <div class="modal fade" id="pwdChgModal" tabindex="-1" role="dialog" aria-labelledby="pwdChgModalLabel" aria-hidden="true"> <div class="modal fade" id="pwdChgModal" tabindex="-1" role="dialog" aria-labelledby="pwdChgModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
@@ -238,10 +226,10 @@
<form name="form" id="modalLoginForm" action="<c:url value="/changePassword.do"/>" method="post"> <form name="form" id="modalLoginForm" action="<c:url value="/changePassword.do"/>" method="post">
<div class="modal-body"> <div class="modal-body">
<div class="form-group d-flex"> <div class="form-group d-flex">
<input type="text" name="userId" class="form-control rounded-left" placeholder="User Id" required> <input type="text" name="resetUserId" class="form-control rounded-left" placeholder="User Id" required>
</div> </div>
<div class="form-group d-flex"> <div class="form-group d-flex">
<input type="password" name="password" class="form-control rounded-left" placeholder="<%= localeMessage.getString("login.placeholderCurrentPassword") %>" required> <input type="password" name="resetPassword" class="form-control rounded-left" placeholder="<%= localeMessage.getString("login.placeholderCurrentPassword") %>" required>
</div> </div>
<p><%= localeMessage.getString("login.toChangePasswordMessage") %></p> <p><%= localeMessage.getString("login.toChangePasswordMessage") %></p>
<div class="form-group d-flex"> <div class="form-group d-flex">
@@ -257,7 +245,7 @@
</form> </form>
</div> </div>
</div> </div>
</div> --%> </div>
</body> </body>
</html> </html>
File diff suppressed because it is too large Load Diff
@@ -205,14 +205,11 @@
if (isDetail){ if (isDetail){
$("#title").append(" 수정") $("#title").append(" 수정")
$("#btn_modify").prop('disabled', true);
$("#btn_unmask").show();
buttonControl(true); buttonControl(true);
} else { } else {
$("#title").append(" 등록") $("#title").append(" 등록")
$("#managerInfoSectionTitle").hide(); $("#managerInfoSectionTitle").hide();
$("#btn_modify").html('<i class="material-icons">save</i> <%= localeMessage.getString("button.register") %></button>'); $("#btn_modify").html('<i class="material-icons">save</i> <%= localeMessage.getString("button.register") %></button>');
$("#btn_unmask").hide();
buttonControl(false); buttonControl(false);
} }
@@ -397,69 +394,6 @@
downloadFile(fileId, '1'); // fileSn은 '1'로 가정 downloadFile(fileId, '1'); // fileSn은 '1'로 가정
}); });
$("#btn_unmask").click(function () {
if (!isDetail) {
alert("등록된 정보만 마스킹 해제할 수 있습니다.");
return;
}
var reason = prompt("마스킹 해제 사유를 입력해 주세요");
if (reason != null && reason.trim() !== '') {
$.ajax({
type: "POST",
url: url,
dataType: "json",
data: {
cmd: "UNMASK",
id: key,
reason: reason // reason 파라미터 추가
},
success: function (json) {
var portalOrgData = json.portalOrg;
var corporateManagerData = json.corporateManager;
// 마스킹 해제된 데이터를 화면에 반영
$("#orgName").val(portalOrgData.orgName);
$("#orgCode").val(portalOrgData.orgCode);
$("#compRegNo").val(portalOrgData.compRegNo);
$("#corpRegNo").val(portalOrgData.corpRegNo);
$("#ceoName").val(portalOrgData.ceoName);
$("#orgAddr").val(portalOrgData.orgAddr);
$("#ipListBody").empty(); // 기존 IP 목록 삭제
if (portalOrgData.ipWhitelist) {
var ipList = portalOrgData.ipWhitelist.split(',');
ipList.forEach(function(ip, index) {
var trimmedIp = ip.trim();
if (trimmedIp) {
addIpToTable(trimmedIp, index + 1);
}
});
$("#ipWhitelist").val(portalOrgData.ipWhitelist);
}
if (corporateManagerData) {
$("#userName").text(corporateManagerData.userName);
$("#userStatusDescription").text(corporateManagerData.userStatusDescription);
$("#emailAddr").text(corporateManagerData.emailAddr);
$("#mobileNumber").text(corporateManagerData.mobileNumber);
}
// 마스킹 해제 성공 시 수정 버튼 활성화
$("#btn_modify").prop('disabled', false);
$("#btn_unmask").prop('disabled', true); // 마스킹 해제 버튼 비활성화
alert("마스킹 해제가 완료되었습니다. 이제 데이터를 수정할 수 있습니다.");
},
error: function (e) {
alert("마스킹 해제 중 오류가 발생했습니다. " + e.responseText);
}
});
} else if (reason !== null) {
alert("마스킹 해제 사유를 입력해 주세요.");
}
});
$("#btn_modify").click(function(){ $("#btn_modify").click(function(){
if (!checkRequired("ajaxForm")) return; if (!checkRequired("ajaxForm")) return;
@@ -611,7 +545,6 @@
</div><!-- end content_top --> </div><!-- end content_top -->
<div class="content_middle"> <div class="content_middle">
<div class="search_wrap"> <div class="search_wrap">
<button type="button" class="cssbtn" id="btn_unmask" level="W" status="DETAIL"><i class="material-icons">lock_open</i> 마스킹해제</button>
<button type="button" class="cssbtn" id="btn_modify" level="W" status="DETAIL,NEW"><i class="material-icons">save</i> <%= localeMessage.getString("button.modify") %></button> <button type="button" class="cssbtn" id="btn_modify" level="W" status="DETAIL,NEW"><i class="material-icons">save</i> <%= localeMessage.getString("button.modify") %></button>
<button type="button" class="cssbtn" id="btn_delete" level="W" status="DETAIL"><i class="material-icons">delete</i> <%= localeMessage.getString("button.delete") %></button> <button type="button" class="cssbtn" id="btn_delete" level="W" status="DETAIL"><i class="material-icons">delete</i> <%= localeMessage.getString("button.delete") %></button>
<button type="button" class="cssbtn" id="btn_previous" level="R" status="DETAIL,NEW"><i class="material-icons">arrow_back</i> <%= localeMessage.getString("button.previous") %></button> <button type="button" class="cssbtn" id="btn_previous" level="R" status="DETAIL,NEW"><i class="material-icons">arrow_back</i> <%= localeMessage.getString("button.previous") %></button>
@@ -92,7 +92,8 @@
'<%= localeMessage.getString("portalUser.roleName") %>', '<%= localeMessage.getString("portalUser.roleName") %>',
'<%= localeMessage.getString("portalUser.userStatus") %>', '<%= localeMessage.getString("portalUser.userStatus") %>',
'<%= localeMessage.getString("portalUser.createOn") %>', '<%= localeMessage.getString("portalUser.createOn") %>',
'<%= localeMessage.getString("portalUser.approvalStatus") %>' '<%= localeMessage.getString("portalUser.approvalStatus") %>',
'<%= localeMessage.getString("portalUser.accountLockYn") %>'
], ],
colModel: [ colModel: [
{name: 'rowNum', align: 'center', width: '30', sortable: false}, {name: 'rowNum', align: 'center', width: '30', sortable: false},
@@ -104,7 +105,8 @@
{name: 'roleCodeDescription', align: 'center', width: "80"}, {name: 'roleCodeDescription', align: 'center', width: "80"},
{name: 'userStatusDescription', align: 'center', width: "50"}, {name: 'userStatusDescription', align: 'center', width: "50"},
{name: 'createdDate', align: 'center', width: "100", formatter: timeStampFormat}, {name: 'createdDate', align: 'center', width: "100", formatter: timeStampFormat},
{name: 'approvalStatusDescription', align: 'center', width: "50"} {name: 'approvalStatusDescription', align: 'center', width: "50"},
{name: 'accountLockYn', align: 'center', width: "50"}
], ],
jsonReader: { jsonReader: {
repeatitems: false repeatitems: false
@@ -66,16 +66,18 @@
// 현재 상태가 탈퇴인 경우 // 현재 상태가 탈퇴인 경우
if (status === STATUS.REMOVED) { if (status === STATUS.REMOVED) {
$("#btn_modify").show().prop('disabled', true); $("#btn_modify").show().prop('disabled', false);
return; return;
} }
// 일반 상태 // 일반 상태
$("#btn_modify").show().prop('disabled', !isUnmasked); /* $("#btn_modify").show().prop('disabled', !isUnmasked);
if (isUnmasked) { if (isUnmasked) {
$("input, select").prop('disabled', false); $("input, select").prop('disabled', false);
updateOrgControl(); updateOrgControl();
} } */
// 25.09.29 - 항상 해제
$("#btn_modify").show().prop('disabled', false);
} }
function init() { function init() {
@@ -182,6 +184,9 @@
} else { } else {
$('#orgInfoSection').hide(); $('#orgInfoSection').hide();
} }
$("select[name=accountLockYn]").val(data.accountLockYn);
// 25.09.23 - 마스킹 해제 상태를 기본으로 적용 / Rinjae // 25.09.23 - 마스킹 해제 상태를 기본으로 적용 / Rinjae
updateButtonStates($("#userStatus").val(), true); updateButtonStates($("#userStatus").val(), true);
@@ -261,7 +266,7 @@
} }
const fullLoginId = id + "@" + domain; const fullLoginId = id + "@" + domain;
const emailPattern = /^[A-Za-z][A-Za-z0-9._-]*@[A-Za-z0-9][-A-Za-z0-9.]+\.[A-Za-z]{2,}$/; const emailPattern = /^[A-Za-z0-9._-]*@[A-Za-z0-9][-A-Za-z0-9.]+\.[A-Za-z]{2,}$/;
if (!emailPattern.test(fullLoginId)) { if (!emailPattern.test(fullLoginId)) {
alert(fullLoginId + " 은 올바른 이메일 형식이 아닙니다."); alert(fullLoginId + " 은 올바른 이메일 형식이 아닙니다.");
return; return;
@@ -558,9 +563,11 @@
</th> </th>
<td colspan="3"> <td colspan="3">
<div class="input-group" style="width: 50%;"> <div class="input-group" style="width: 50%;">
<input type="text" id="loginId" style="width:10%; display: inline-block;" maxlength="30" onkeyup="validateEmailId(this)"/> <input type="text" id="loginId" style="width:10%; display: inline-block; ime-mode: disable;" maxlength="30" onkeyup="validateEmailId(this)"
lang="en" />
<span style="padding: 0 10px;">@</span> <span style="padding: 0 10px;">@</span>
<input type="text" id="domain" style="width:20%; display: inline-block;" maxlength="50" onkeyup="validateDomainInput(this)"/> <input type="text" id="domain" style="width:20%; display: inline-block; ime-mode: disable;" maxlength="50" onkeyup="validateDomainInput(this)"
lang="en" />
<input type="hidden" name="loginId"/> <input type="hidden" name="loginId"/>
<button type="button" class="smallBtn cssbtn" id="btn_check_id" level="R" status="NEW" <button type="button" class="smallBtn cssbtn" id="btn_check_id" level="R" status="NEW"
style="margin-left: 10px; display: inline-block;"> style="margin-left: 10px; display: inline-block;">
@@ -629,6 +636,19 @@
</div> </div>
</td> </td>
</tr> </tr>
<tr>
<th><%= getRequiredLabel(localeMessage.getString("portalUser.accountLockYn")) %></th>
<td>
<div class="select-style">
<select name="accountLockYn" id="accountLockYn">
<option value="Y">Y</option>
<option value="N">N</option>
</select>
</div>
</td>
<th></th>
<td></td>
</tr>
</table> </table>
</form> </form>
@@ -48,6 +48,19 @@
background-color: #eeeeee; background-color: #eeeeee;
border-color: #cccccc; border-color: #cccccc;
} }
/* input-group 안에서 invalid-feedback이 차지하는 공간 없애기, 유효성검사 할 때 현재 스타일 바뀌지않게 CSS 처리 */
.input-group > .invalid-feedback {
position: absolute;
top: 100%;
left: 0;
width: 100%;
margin-top: .25rem;
}
.input-group {
position: relative;
}
</style> </style>
<script language="javascript" > <script language="javascript" >
@@ -101,16 +114,31 @@
standardMessageItems: [], standardMessageItems: [],
inboundResponseStandardMessageItems: [], inboundResponseStandardMessageItems: [],
fromResponseAdapter: '', fromResponseAdapter: '',
toResponseAdapter: '',
inboundResponseHttpMethod: '', inboundResponseHttpMethod: '',
inboundResponseRestPath: '', inboundResponseRestPath: '',
syncAsyncType: 'sync' outboundResponseHttpMethod: '',
outboundResponseRestPath: '',
syncAsyncType: 'sync',
wordType: '1',
requestType:'S'
}, },
// 컴퓨티드 프로퍼티 // 컴퓨티드 프로퍼티
get showInboundResponse() { get showInboundResponse() {
return this.apiInterface.syncAsyncType === 'asyncSync'; return this.apiInterface.syncAsyncType === 'asyncSync';
}, },
// 컴퓨티드 프로퍼티
get showOutboundResponse() {
return this.apiInterface.syncAsyncType === 'syncAsync';
},
})); }));
// 요청/응답 disable 처리.
Alpine.store('formState', {
isReqResDisabled: false
});
}); });
// Alpine 컴포넌트 접근을 위한 유틸리티 함수 // Alpine 컴포넌트 접근을 위한 유틸리티 함수
@@ -136,6 +164,7 @@
new makeOptions("ADPTRBZWKGROUPNAME","ADPTRBZWKGROUPDESC").setObj($("select[name=fromAdapter]")).setFormat(codeName3OptionFormat).setNoValueInclude(true).setAttr('std','ADPTRMSGPTRNCD').setData(json.fromList).rendering(); new makeOptions("ADPTRBZWKGROUPNAME","ADPTRBZWKGROUPDESC").setObj($("select[name=fromAdapter]")).setFormat(codeName3OptionFormat).setNoValueInclude(true).setAttr('std','ADPTRMSGPTRNCD').setData(json.fromList).rendering();
new makeOptions("ADPTRBZWKGROUPNAME","ADPTRBZWKGROUPDESC").setObj($("select[name=fromResponseAdapter]")).setFormat(codeName3OptionFormat).setNoValueInclude(true).setData(json.toList).rendering(); new makeOptions("ADPTRBZWKGROUPNAME","ADPTRBZWKGROUPDESC").setObj($("select[name=fromResponseAdapter]")).setFormat(codeName3OptionFormat).setNoValueInclude(true).setData(json.toList).rendering();
new makeOptions("ADPTRBZWKGROUPNAME","ADPTRBZWKGROUPDESC").setObj($("select[name=toAdapter]")).setFormat(codeName3OptionFormat).setNoValueInclude(true).setData(json.toList).rendering(); new makeOptions("ADPTRBZWKGROUPNAME","ADPTRBZWKGROUPDESC").setObj($("select[name=toAdapter]")).setFormat(codeName3OptionFormat).setNoValueInclude(true).setData(json.toList).rendering();
new makeOptions("ADPTRBZWKGROUPNAME","ADPTRBZWKGROUPDESC").setObj($("select[name=toResponseAdapter]")).setFormat(codeName3OptionFormat).setNoValueInclude(true).setData(json.fromList).rendering();
//if(key == "") setSearchable(selectName); // 콤보에 searchable 설정 //if(key == "") setSearchable(selectName); // 콤보에 searchable 설정
if (typeof callback === 'function') { if (typeof callback === 'function') {
@@ -196,27 +225,33 @@
// 어댑터 설정 정보 객체에 인바운드 응답 관련 설정 추가 // 어댑터 설정 정보 객체에 인바운드 응답 관련 설정 추가
const adapterConfig = { const adapterConfig = {
inbound: { inbound: {
ioType: 'inbound', ioType: 'inbound',
methodSelectId: '#inboundHttpMethod', methodSelectId: '#inboundHttpMethod',
restPathInputId: '#inboundRestPath', restPathInputId: '#inboundRestPath',
adapterUrlId: '#fromAdapterUrl', adapterUrlId: '#fromAdapterUrl',
}, },
outbound: { outbound: {
ioType: 'outbound', ioType: 'outbound',
methodSelectId: '#outboundHttpMethod', methodSelectId: '#outboundHttpMethod',
restPathInputId: '#outboundRestPath', restPathInputId: '#outboundRestPath',
adapterUrlId: '#toAdapterUrl', adapterUrlId: '#toAdapterUrl',
standardOptionsId: '#standardOutboundOptions', standardOptionsId: '#standardOutboundOptions',
commonFieldId: '#commonFieldPart' commonFieldId: '#commonFieldPart'
}, },
inboundResponse: { inboundResponse: {
methodSelectId: '#inboundResponseHttpMethod', methodSelectId: '#inboundResponseHttpMethod',
restPathInputId: '#inboundResponseRestPath', restPathInputId: '#inboundResponseRestPath',
adapterUrlId: '#fromResponseAdapterUrl', adapterUrlId: '#fromResponseAdapterUrl',
standardOptionsId: '#inboundResponseRestPart', standardOptionsId: '#inboundResponseRestPart',
commonFieldId: '#inboundResponseCommonFieldPart' commonFieldId: '#inboundResponseCommonFieldPart'
} },
outboundResponse: {
methodSelectId: '#outboundResponseHttpMethod',
restPathInputId: '#outboundResponseRestPath',
adapterUrlId: '#toResponseAdapterUrl',
standardOptionsId: '#outboundResponseRestPart'
}
}; };
// 어댑터 선택 변경 시 호출되는 함수 수정 // 어댑터 선택 변경 시 호출되는 함수 수정
@@ -373,9 +408,13 @@
$("select[name=authType]" ).val(data["authType"]); $("select[name=authType]" ).val(data["authType"]);
} }
$("select[name=fromResponseAdapter]" ).val(data["fromResponseAdapter"]);//fromResponseAdapter $("select[name=fromResponseAdapter]" ).val(data["fromResponseAdapter"]);//fromResponseAdapter
$("select[name=toResponseAdapter]" ).val(data["toResponseAdapter"]);//toResponseAdapter
$('#inboundHttpMethod').val(data.inboundHttpMethod); $('#inboundHttpMethod').val(data.inboundHttpMethod);
$('#outboundHttpMethod').val(data.outboundHttpMethod); $('#outboundHttpMethod').val(data.outboundHttpMethod);
$('#inboundResponseHttpMethod').val(data.inboundResponseHttpMethod); $('#inboundResponseHttpMethod').val(data.inboundResponseHttpMethod);
$('#outboundResponseHttpMethod').val(data.outboundResponseHttpMethod);
$('#svcLogLvelNo').val(data.svcLogLvelNo); $('#svcLogLvelNo').val(data.svcLogLvelNo);
if(data['inboundRequestLayout']!=null && data['outboundRequestLayout']!=null){ if(data['inboundRequestLayout']!=null && data['outboundRequestLayout']!=null){
@@ -388,7 +427,7 @@
if('Y' == data.transformYn){ if('Y' == data.transformYn){
$('#toggleTransformYn').bootstrapToggle('on'); $('#toggleTransformYn').bootstrapToggle('on');
} }
if('Y' == data.sinYn){ if('Y' == data.simYn){
$('#toggleSimYn').bootstrapToggle('on'); $('#toggleSimYn').bootstrapToggle('on');
} }
if('Y' == data.apiEnabledYn){ if('Y' == data.apiEnabledYn){
@@ -420,6 +459,12 @@
const inOutType = data['eaiSvcName'].slice(-1); const inOutType = data['eaiSvcName'].slice(-1);
$('#inOutType').val(inOutType); $('#inOutType').val(inOutType);
$("input[name=btnRadioReqRes][value='" + sendRecvType + "']").prop("checked", true);
Alpine.store('formState').isReqResDisabled = true;
$("input[name=btnRadioInOut][value='" + inOutType + "']").prop("checked", true);
$("input[name=btnRadioInOut]").prop("disabled", true);
$('#eaiBzwkDstcd').attr("readonly", "readonly"); $('#eaiBzwkDstcd').attr("readonly", "readonly");
$('#eaiSvcName').attr("readonly", "readonly"); $('#eaiSvcName').attr("readonly", "readonly");
$('#sendRecvType').attr("readonly", "readonly"); $('#sendRecvType').attr("readonly", "readonly");
@@ -439,6 +484,7 @@
$('#cloneOrgInterfaceIdDesc').text(eaiSvcName); $('#cloneOrgInterfaceIdDesc').text(eaiSvcName);
$("#fromResponseAdapter").change(); $("#fromResponseAdapter").change();
$("#toResponseAdapter").change();
}, },
error:function(e){ error:function(e){
alert(e.responseText); alert(e.responseText);
@@ -1057,6 +1103,14 @@
} }
}); });
$("#toResponseAdapter").change(function() {
const alpineData = getApiInterface();
if (alpineData.syncAsyncType === 'syncAsync') {
const adapterGroupName = $(this).val();
adapterSelectChange('outboundResponse', adapterGroupName);
}
});
$('#outboundRestPath').on('input', function() { $('#outboundRestPath').on('input', function() {
checkTagVariableUrl(); checkTagVariableUrl();
}); });
@@ -1142,7 +1196,7 @@
type: "POST", type: "POST",
url: jsonUrl, url: jsonUrl,
data: { data: {
cmd: 'INSERT_CLONE', cmd: 'CLONE',
orgApiInterfaceId, orgApiInterfaceId,
newBizCode, newBizCode,
newApiInterfaceId, newApiInterfaceId,
@@ -1263,6 +1317,7 @@
<button type="button" class="cssbtn" id="btn_modify" level="R" status="DETAIL,NEW"><i class="material-icons">save</i> <%= localeMessage.getString("button.modify") %></button> <button type="button" class="cssbtn" id="btn_modify" level="R" status="DETAIL,NEW"><i class="material-icons">save</i> <%= localeMessage.getString("button.modify") %></button>
<button type="button" class="cssbtn" id="btn_api_spec" level="R" status="DETAIL,NEW"><i class="material-icons">description</i> API 스펙</button> <button type="button" class="cssbtn" id="btn_api_spec" level="R" status="DETAIL,NEW"><i class="material-icons">description</i> API 스펙</button>
<button type="button" class="cssbtn" id="btn_previous" level="R" status="DETAIL,NEW"><i class="material-icons">arrow_back</i> <%= localeMessage.getString("button.previous") %></button> <button type="button" class="cssbtn" id="btn_previous" level="R" status="DETAIL,NEW"><i class="material-icons">arrow_back</i> <%= localeMessage.getString("button.previous") %></button>
<%-- <button type="button" class="cssbtn" id="btn_excel_export" level="R" status="DETAIL"><i class="material-icons">table_view</i> <%= localeMessage.getString("button.excel") %></button> --%>
</div> </div>
<div class="title" id="title" style="font-size:1.4em">${rmsMenuName}</div> <div class="title" id="title" style="font-size:1.4em">${rmsMenuName}</div>
<form id="ajaxForm" <form id="ajaxForm"
@@ -1278,19 +1333,35 @@
<select id="eaiBzwkDstcd" class="form-select" name="eaiBzwkDstcd" style="width: 100%"> <select id="eaiBzwkDstcd" class="form-select" name="eaiBzwkDstcd" style="width: 100%">
</select> </select>
</div> </div>
<div class="form-group col-md-3">
<label for="eaiSvcName"><span class="material-icons-outlined">badge</span> API 명</label> <div class="form-group col-md-3">
<div class="input-group"> <label for="eaiSvcName">
<input type="text" class="form-control" id="eaiSvcName" name="eaiSvcName" required> <span class="material-icons-outlined">badge</span> API 명
<span class="input-group-text" id="sendRecvTypeSpan" style="padding: 0; border: none;"> </label>
<input type="text" id="sendRecvType" name="sendRecvType" class="ignore form-control" readonly="readonly" style="width: 40px; text-align: center; border-radius: 0; margin-left: -1px;" value="S"> <div class="input-group">
</span> <input type="text"
<span class="input-group-text" id="inOutTypeSpan" style="padding: 0; border: none;"> class="form-control"
<input type="text" id="inOutType" name="inOutType" class="ignore form-control" readonly="readonly" style="width: 40px; text-align: center; border-radius: 0; margin-left: -1px;" value="1"> id="eaiSvcName"
</span> name="eaiSvcName"
</div> required>
</div> <span class="input-group-text" id="sendRecvTypeSpan" style="padding: 0; border: none;">
<div class="form-group col-md-6"> <input type="text" id="sendRecvType" name="sendRecvType"
class="ignore form-control"
readonly="readonly"
style="width: 40px; text-align: center; border-radius: 0; margin-left: -1px;"
:value="apiInterface.requestType">
</span>
<span class="input-group-text" id="inOutTypeSpan" style="padding: 0; border: none;">
<input type="text" id="inOutType" name="inOutType"
class="ignore form-control"
readonly="readonly"
style="width: 40px; text-align: center; border-radius: 0; margin-left: -1px;"
:value="apiInterface.wordType">
</span>
</div>
</div>
<div class="form-group col-md-5">
<label for="eaiSvcDesc"><span class="material-icons-outlined">chat</span> 설명</label> <label for="eaiSvcDesc"><span class="material-icons-outlined">chat</span> 설명</label>
<input type="text" class="form-control" id="eaiSvcDesc" name="eaiSvcDesc" required></input> <input type="text" class="form-control" id="eaiSvcDesc" name="eaiSvcDesc" required></input>
</div> </div>
@@ -1298,52 +1369,93 @@
<label for="toggleTransformYn"><span class="material-icons">account_tree</span> 전문변환</label><br> <label for="toggleTransformYn"><span class="material-icons">account_tree</span> 전문변환</label><br>
<input type="checkbox" name="toggleTransformYn" id="toggleTransformYn" data-toggle="toggle" data-onstyle="success" data-on="사용" data-off="미사용" data-width="100" data-offstyle="secondary" data-style="ios" /> <input type="checkbox" name="toggleTransformYn" id="toggleTransformYn" data-toggle="toggle" data-onstyle="success" data-on="사용" data-off="미사용" data-width="100" data-offstyle="secondary" data-style="ios" />
</div> </div>
<div class="form-group col-md-1">
<label for="toggleSimYn"><span class="material-icons" >science</span> 가상응답</label><br>
<input type="checkbox" name="toggleSimYn" id="toggleSimYn" data-toggle="toggle" data-onstyle="success" data-on="사용" data-off="미사용" data-width="100" data-offstyle="secondary" data-style="ios"/>
</div>
</div> </div>
</fieldset> </fieldset>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-12">
<!-- 기존 인터페이스 타입 영역을 Alpine 컴포넌트로 감싸기 --> <!-- 기존 인터페이스 타입 영역을 Alpine 컴포넌트로 감싸기 -->
<fieldset class="groupbox-border"> <fieldset class="groupbox-border">
<legend class="groupbox-border">INTERFACE TYPE</legend> <legend class="groupbox-border">INTERFACE TYPE</legend>
<div class="row"> <div class="row">
<div class="form-group col-md-3">
<label for="eaiBzwkDstcd"><span class="material-icons-outlined">sync</span> Sync/Async 타입</label><br> <label for="eaiBzwkDstcd"><span class="material-icons-outlined">sync</span> Sync/Async 타입</label><br>
<div class="btn-group" id="btnGroupSyncAsync" role="group"> <div class="btn-group" id="btnGroupSyncAsync" role="group">
<input type="radio" <input type="radio"
class="btn-check" class="btn-check"
name="btnRadioSyncAsync" name="btnRadioSyncAsync"
id="btnTypeSync" id="btnTypeSync"
value="sync" value="sync"
x-model="apiInterface.syncAsyncType"> x-model="apiInterface.syncAsyncType">
<label class="btn btn-outline-primary" for="btnTypeSync"> <label class="btn btn-outline-primary" for="btnTypeSync">
<i class="bi bi-arrow-left-right"></i> Sync <i class="bi bi-arrow-repeat"></i> Sync
</label> </label>
<input type="radio"
class="btn-check"
name="btnRadioSyncAsync"
id="btnTypeAsync"
value="async"
x-model="apiInterface.syncAsyncType">
<label class="btn btn-outline-primary" for="btnTypeAsync">
<i class="bi bi-arrow-left-right"></i> Async
</label>
<input type="radio"
class="btn-check"
name="btnRadioSyncAsync"
id="btnTypeAsyncSync"
value="asyncSync"
x-model="apiInterface.syncAsyncType">
<label class="btn btn-outline-primary" for="btnTypeAsyncSync">
<i class="bi bi-arrow-return-left"></i> A > S
</label>
<input type="radio"
class="btn-check"
name="btnRadioSyncAsync"
id="btnTypeSyncAsync"
value="syncAsync"
x-model="apiInterface.syncAsyncType">
<label class="btn btn-outline-primary" for="btnTypeSyncAsync">
<i class="bi bi-share-fill"></i> S > A
</label>
</div>
</div>
<div class="form-group col-md-3">
<label for="eaiBzwkDstcd">요청/응답 구분</label><br>
<div class="btn-group" role="group" aria-label="Basic radio toggle button group"
x-effect="if (apiInterface.syncAsyncType !== 'async') apiInterface.requestType = 'S'">
<input type="radio" class="btn-check" name="btnRadioReqRes" id="btnTypeRequest"
x-model="apiInterface.requestType"
value="S" :disabled="apiInterface.syncAsyncType !== 'async' || $store.formState.isReqResDisabled">
<label class="btn btn-outline-primary" for="btnTypeRequest"><i class="bi bi-arrow-bar-right"></i> 요청</label>
<input type="radio" class="btn-check" name="btnRadioReqRes" id="btnTypeResponse"
x-model="apiInterface.requestType"
value="R" :disabled="apiInterface.syncAsyncType !== 'async' || $store.formState.isReqResDisabled">
<label class="btn btn-outline-primary" for="btnTypeResponse"><i class="bi bi-arrow-bar-left"></i> 응답</label>
</div>
</div>
<div class="form-group col-md-3">
<label for="eaiBzwkDstcd">당/타발 구분</label><br>
<div class="btn-group" role="group" aria-label="Basic radio toggle button group">
<input type="radio" class="btn-check" name="btnRadioInOut" id="btnTypeInword" value="1" x-model="apiInterface.wordType" checked>
<label class="btn btn-outline-primary" for="btnTypeInword"><i class="bi bi-arrow-right-circle"></i> 당발</label>
<input type="radio" <input type="radio" class="btn-check" name="btnRadioInOut" id="btnTypeOutword" value="2" x-model="apiInterface.wordType">
class="btn-check" <label class="btn btn-outline-primary" for="btnTypeOutword"><i class="bi bi-arrow-left-circle"></i> 타발</label>
name="btnRadioSyncAsync" </div>
id="btnTypeAsync" </div>
value="async"
x-model="apiInterface.syncAsyncType">
<label class="btn btn-outline-primary" for="btnTypeAsync">
<i class="bi bi-arrow-repeat"></i> Async
</label>
<input type="radio"
class="btn-check"
name="btnRadioSyncAsync"
id="btnTypeAsyncSync"
value="asyncSync"
x-model="apiInterface.syncAsyncType">
<label class="btn btn-outline-primary" for="btnTypeAsyncSync">
<i class="bi bi-arrow-return-left"></i> A > S
</label>
</div>
</div> </div>
</fieldset> </fieldset>
</div> </div>
<div class="col-md-7"> <div class="col-md-10">
<fieldset class="groupbox-border"> <fieldset class="groupbox-border">
<legend class="groupbox-border">TRANSACTION OPTIONS</legend> <legend class="groupbox-border">TRANSACTION OPTIONS</legend>
<div class="row"> <div class="row">
@@ -1354,6 +1466,7 @@
<option value="1">[1]오류 로그만(900)</option> <option value="1">[1]오류 로그만(900)</option>
<option value="2">[2]인바운드(100,400)</option> <option value="2">[2]인바운드(100,400)</option>
<option value="3" selected>[3]전체로그</option> <option value="3" selected>[3]전체로그</option>
<option value="4">[4]업무데이터 제외</option>
</select> </select>
</div> </div>
<div class="form-group col-md-2"> <div class="form-group col-md-2">
@@ -1408,21 +1521,38 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row" <div class="row">
x-show="showInboundResponse">
<div class="form-group col-md-6"> <div class="form-group col-md-6">
<label for="fromResponseAdapter"> <div x-show="showInboundResponse">
<span class="material-icons">keyboard_return</span> <label for="fromResponseAdapter">
INBOUND (ASYNC) 응답 어댑터 <span class="material-icons">keyboard_return</span>
</label> INBOUND (ASYNC) 응답 어댑터
<select id="fromResponseAdapter" </label>
class="form-select" <select id="fromResponseAdapter"
name="fromResponseAdapter" class="form-select"
required name="fromResponseAdapter"
:disabled="!showInboundResponse"> required
</select> :disabled="!showInboundResponse">
<small id="fromResponseAdapterUrl" class="form-text text-muted"></small> </select>
</div> <small id="fromResponseAdapterUrl" class="form-text text-muted"></small>
</div>
</div>
<div class="form-group col-md-6">
<!-- toAdapterUrl 겹치지 않도록 mt-3 속성 추가 -->
<div class="mt-3" x-show="showOutboundResponse">
<label for="toResponseAdapter">
<span class="material-icons">keyboard_return</span>
OUTBOUND (ASYNC) 응답 어댑터
</label>
<select id="toResponseAdapter"
class="form-select"
name="toResponseAdapter"
required
:disabled="!showOutboundResponse">
</select>
<small id="toResponseAdapterUrl" class="form-text text-muted"></small>
</div>
</div>
</div> </div>
</fieldset> </fieldset>
</div> </div>
@@ -1438,8 +1568,8 @@
<%= localeMessage.getString("apiInterface.recvMethod") %> <%= localeMessage.getString("apiInterface.recvMethod") %>
</label> </label>
<select id="inboundHttpMethod" class="form-select" name="inboundHttpMethod" disabled> <select id="inboundHttpMethod" class="form-select" name="inboundHttpMethod" disabled>
<option value="get">GET</option>
<option value="post">POST</option> <option value="post">POST</option>
<option value="get">GET</option>
<option value="put">PUT</option> <option value="put">PUT</option>
<option value="patch">PATCH</option> <option value="patch">PATCH</option>
<option value="delete">DELETE</option> <option value="delete">DELETE</option>
@@ -1488,8 +1618,8 @@
class="form-select" class="form-select"
name="inboundResponseHttpMethod" name="inboundResponseHttpMethod"
disabled> disabled>
<option value="get">GET</option>
<option value="post">POST</option> <option value="post">POST</option>
<option value="get">GET</option>
<option value="put">PUT</option> <option value="put">PUT</option>
<option value="patch">PATCH</option> <option value="patch">PATCH</option>
<option value="delete">DELETE</option> <option value="delete">DELETE</option>
@@ -1528,34 +1658,34 @@
</div> </div>
</fieldset> </fieldset>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<fieldset class="groupbox-border"> <fieldset class="groupbox-border">
<legend class="groupbox-border">OUTBOUND ROUTING</legend> <legend class="groupbox-border">OUTBOUND ROUTING</legend>
<div id="outboundRoutingContent"> <div id="outboundRoutingContent">
<div class="row" id="standardOutboundOptions"> <div class="row" id="standardOutboundOptions">
<div class="form-group col-md-4"> <div class="form-group col-md-4">
<label for="outboundHttpMethod"> <label for="outboundHttpMethod">
<span class="material-icons">http</span> <span class="material-icons">http</span>
송신 메소드 송신 메소드
</label> </label>
<select id="outboundHttpMethod" class="form-select" name="outboundHttpMethod" disabled> <select id="outboundHttpMethod" class="form-select" name="outboundHttpMethod" disabled>
<option value="get">GET</option> <option value="post">POST</option>
<option value="post">POST</option> <option value="get">GET</option>
<option value="put">PUT</option> <option value="put">PUT</option>
<option value="patch">PATCH</option> <option value="patch">PATCH</option>
<option value="delete">DELETE</option> <option value="delete">DELETE</option>
</select> </select>
</div> </div>
<div class="form-group col-md-8"> <div class="form-group col-md-8">
<label for="outboundRestPath"> <label for="outboundRestPath">
<span class="material-icons">link</span> <span class="material-icons">link</span>
<span class="badge badge-warning" id="tagVariableUrl" style="display: none">가변</span> <span class="badge badge-warning" id="tagVariableUrl" style="display: none">가변</span>
송신 REST PATH(URL) 송신 REST PATH(URL)
</label> </label>
<input type="text" class="form-control" id="outboundRestPath" <input type="text" class="form-control" id="outboundRestPath"
name="outboundRestPath" disabled> name="outboundRestPath" disabled>
</div> </div>
</div> </div>
<div id="commonFieldPart" class="row" style="display:none"> <div id="commonFieldPart" class="row" style="display:none">
<div class="form-group col-md-12"> <div class="form-group col-md-12">
<label for="standardMessageItemsButton"> <label for="standardMessageItemsButton">
@@ -1569,10 +1699,51 @@
</button> </button>
</div> </div>
</div> </div>
</div> </div>
</div>
</fieldset> <div id="outboundResponseMethodPathRow"
</div> x-show="showOutboundResponse">
<div id="outboundResponseRestPart" class="row">
<div class="form-group col-md-4">
<label for="outboundResponseHttpMethod">
<span class="material-icons">http</span>
응답 수신 메소드
</label>
<select id="outboundResponseHttpMethod" class="form-select" name="outboundResponseHttpMethod" disabled>
<option value="post">POST</option>
<option value="get">GET</option>
<option value="put">PUT</option>
<option value="patch">PATCH</option>
<option value="delete">DELETE</option>
</select>
</div>
<div class="form-group col-md-8">
<label for="outboundResponseRestPath">
<span class="material-icons">link</span>
응답 수신 REST PATH(URL)
</label>
<input type="text" class="form-control" id="outboundResponseRestPath" name="outboundResponseRestPath" disabled>
</div>
</div>
<div id="outboundResponseCommonFieldPart" class="row" style="display:none">
<div class="form-group col-md-12">
<label for="standardMessageItemsButton">
<span class="material-icons-outlined">view_list</span>
표준전문 공통부 값
</label>
<div class="d-grid gap-2">
<button type="button" id="standardMessageItemsButton" class="btn btn-primary"
data-bs-toggle="modal" data-bs-target="#stdCommonValueModal">
수정
</button>
</div>
</div>
</div>
</div>
</div>
</fieldset>
</div>
</div> </div>
<div class="collapse" id="collapseTransform"> <div class="collapse" id="collapseTransform">
<div class="row"> <div class="row">
+83
View File
@@ -0,0 +1,83 @@
<%@ page contentType="text/html;charset=utf-8"%>
<%@page import="ch.qos.logback.core.*"%>
<%@page import="ch.qos.logback.classic.*"%>
<%@page import="org.slf4j.*"%>
<%@page import="java.util.*"%>
<%
String loggerName = request.getParameter("loggerName");
String slevel = request.getParameter("level");
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
if (loggerName != null && !"".equals(loggerName) && slevel != null && !"".equals(slevel)){
Level level = Level.ERROR;
if ("DEBUG".equals(slevel)){
level = Level.DEBUG;
}else if ("INFO".equals(slevel)){
level = Level.INFO;
}else if ("WARN".equals(slevel)){
level = Level.WARN;
}else if ("ERROR".equals(slevel)){
level = Level.ERROR;
}else if ("TRACE".equals(slevel)){
level = Level.TRACE;
}
lc.getLogger(loggerName).setLevel(level);
%>
<%=loggerName %> 의 로그 level이 <%=slevel %> 로 변경되었습니다.
<%
}
List<ch.qos.logback.classic.Logger> logs = lc.getLoggerList();;
%>
<script type="text/javascript">
function changeSessionKey(selectBox) {
var loggerName = selectBox.title;
var level = selectBox.value;
document.frm.loggerName.value=loggerName;
document.frm.level.value=level;
document.frm.submit();
}
</script>
<form name="frm" action="">
<input type=hidden name="loggerName" />
<input type=hidden name="level" />
</form>
<table>
<%
ArrayList<String> al = new ArrayList<String>();
for(ch.qos.logback.classic.Logger log : logs){
if (log.getLevel() != null){
al.add(log.getName());
}
}
al.sort(null);
for(String name : al){
ch.qos.logback.classic.Logger l = lc.getLogger(name);
%>
<tr>
<td><%=l.getName() %></td><td><select name="level" onchange="changeSessionKey(this)" title="<%=l.getName()%>">
<option value=TRACE <%=Level.TRACE==l.getLevel()?"selected":"" %>>
TRACE
</option>
<option value="DEBUG" <%=Level.DEBUG==l.getLevel()?"selected":"" %>>
DEBUG
</option>
<option value="INFO" <%=Level.INFO==l.getLevel()?"selected":"" %>>
INFO
</option>
<option value="WARN" <%=Level.WARN==l.getLevel()?"selected":"" %>>
WARN
</option>
<option value="ERROR" <%=Level.ERROR==l.getLevel()?"selected":"" %>>
ERROR
</option>
</select>
</td>
</tr>
<%
}
%>
</table>
+409
View File
@@ -0,0 +1,409 @@
<%@page import="com.eactive.eai.rms.common.datasource.DataSourceTypeManager"%>
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ page import="java.io.*,
java.util.*,
javax.xml.parsers.*,
org.w3c.dom.*,
javax.xml.xpath.*,
java.sql.*,
javax.sql.*,
com.eactive.eai.agent.command.*,
com.eactive.eai.agent.*,
com.eactive.eai.rms.onl.common.util.*,
com.eactive.eai.rms.common.datasource.*,
org.apache.commons.logging.Log,
org.apache.commons.logging.LogFactory,
java.util.Arrays,
com.eactive.eai.rms.common.util.StringUtils,
com.eactive.eai.common.util.*
" %>
<!-- import 에서 DataSourceFactory의 경로에 파일이 없어서 컴파일 에러가 나서 주석처리함 24.08.29 -->
<!-- com.eactive.eai.transformer.dao.jdbc.DataSourceFactory, -->
<%!
private static final Logger logger = Logger.getLogger("runSql.jsp");
private String NEW_LINE = "\n";
private int MAX_FETCH_SIZE = 1000;
private static Object obj = new Object();
public StringBuffer ListToString(List<String[]> list){
StringBuffer sb = new StringBuffer();
//first item is ColName
boolean isHead = true;
for(int row=1;row<list.size();row++){
String[] ar = (String[])list.get(row);
for(int i =0; i < ar.length; i++){
sb.append(ar[i]).append("\t");
}
sb.append(NEW_LINE);
if(isHead){
sb.append(StringUtils.repeat("--",sb.length())).append(NEW_LINE);
isHead= false;
}
}
return sb;
}
public HashMap runSql(List<String> list,String displayType, String serviceType ) throws Exception {
Connection conn = null;
Statement stmt = null;
String driver = null;
String url = null;
String id =null;
String pwd=null;
ResultSet rs = null;
HashMap<String, Object> results = new HashMap();
StringBuffer sb = new StringBuffer();
StringBuffer errorBuff = new StringBuffer();
int rownum = 0;
try {
DataSourceType dataType = DataSourceTypeManager.getDataSourceType(serviceType);
String jndiName = dataType.getJndiName();
ServiceLocator sl = ServiceLocator.getInstance();
DataSource ds = sl.getDataSource( jndiName);
conn = ds.getConnection();
stmt = conn.createStatement();
int cnt = 0;
for(String sql : list) {
try{
sql = sql.trim();
if(sql.length() == 0) continue;
// System.out.println(sql);
if(sql.toUpperCase().startsWith("SELECT")){
// 메모리 문제로 조회건수를 100건으로 제한하도록 한다. // 요건에 따라 변경 필요
sql = sql + "\n fetch first "+MAX_FETCH_SIZE+" rows only"; // DB2
stmt.execute(sql);
rs = stmt.getResultSet();
List ret = new ArrayList();
int maxColumn = rs.getMetaData().getColumnCount();
ResultSetMetaData rsmd = rs.getMetaData();
String[] colName = new String[maxColumn];
int[] colSize = new int[maxColumn];
//get Col Name
for(int i =1; i<=maxColumn; i++){
colName[i-1] = rsmd.getColumnName(i);
colSize[i-1] = rsmd.getPrecision(i);
}
ret.add(colSize);
ret.add(colName);
while(rs.next()) {
String[] row = new String[maxColumn];
for (int i=0;i<maxColumn;i++){
row[i] = rs.getString(i+1);
}
ret.add(row);
}
if( "FLAT".equals(displayType) ) sb = ListToString(ret);
if( "GRID".equals(displayType) ) results.put("SEL"+(cnt++),ret);
} else { //INSERT, UPDATE, DELETE
throw new Exception("SELECT 만 지원합니다.");
//if ((sql.toUpperCase().startsWith("UPDATE") || sql.toUpperCase().startsWith("DELETE")) && !(sql.toUpperCase().contains("WHERE"))) {
// throw new Exception("UPDATE/DELETE문은 반드시 WHERE절을 포함해야 합니다.");
//}
//int affected = stmt.executeUpdate(sql);
//sb.append("==> Execute - ["+sql.trim()+"], affected "+ affected +" rows").append(NEW_LINE);
}
}catch(Exception e){
errorBuff.append("==> Error - ["+sql + "] : " +e.getMessage()).append(NEW_LINE);
}
}
}catch(Exception e) {
logger.error(e.getMessage(),e);
throw e;
}
finally {
try {
if(stmt != null) stmt.close();
if(conn != null) conn.close();
if(rs != null) rs.close();
}
catch (SQLException sqle) {
logger.error("SQLException was thrown: " + sqle.getMessage());
}
}
HashMap retMap = new HashMap();
retMap.put("records",results);
retMap.put("result", sb.toString());
retMap.put("error", errorBuff.toString());
return retMap;
}
public HashMap execute(String statements, String displayType,String serviceType,ServletRequest request) throws Exception {
String[] results = new String[2];
String[] arr = statements.split(";");
List<String> list = Arrays.asList(arr);
return runSql(list, displayType, serviceType);
}
%>
<%
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Expires", "0");
%>
<%
request.setCharacterEncoding("utf-8");
String filter = request.getParameter("filter");
String displayType = request.getParameter("displayType");
String serviceType = request.getParameter("serviceType");
String statement = request.getParameter("statement");
String userType=request.getParameter("userType");
String run=request.getParameter("run");
if (run == null) run = "";
if (displayType == null) displayType = "GRID";
if (serviceType == null) serviceType = "";
if (statement == null) statement = "";
HashMap runResult =new HashMap();
String errorMessage = "";
if (!"".equals(run) ){
runResult = execute(statement,displayType, serviceType,request);
//response.sendRedirect("/monitoring/jsp/common/jsonResult.jsp");
errorMessage = (String)runResult.get("error");
if(errorMessage == null) errorMessage = "";
}else{
;
}
%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ include file="/jsp/common/include/localemessage.jsp" %>
<script language="javascript" src="<c:url value="/common/js/common.js" />"></script>
<jsp:include page="/jsp/common/include/css.jsp"/>
<jsp:include page="/jsp/common/include/script.jsp"/>
<%-- <script language="javascript" src="<c:url value="/js/jquery-1.7.2.min.js"/>"></script>
<script language="javascript" src="<c:url value="/js/jquery-ui.min.js"/>"></script> --%>
<script language="javascript" >
var $ = jQuery.noConflict();
var url = '<c:url value="/runSql.jsp" />';
$(document).ready(function() {
$('select[name=serviceType]').val("<%=serviceType%>");
//$('select[name=serviceType]').attr('disabled','disabled');
$("#btn_submit").click(function(){
var serviceType = $('select[name=serviceType] option:selected').val();
var postData = new Array();
var statement = $("textarea[name=statement]").val();
if(statement == "" || statement == null){
alert("<%= localeMessage.getString("runSql.checkMsg") %>");
return;
}
document.forms.runSql.run.value = "1";
document.forms.runSql.action= url;
document.forms.runSql.submit();
/* postData.push({name: "statement" , value:statement});
postData.push({name: "serviceType", value:serviceType});
postData.push({name: "run", value:"1"});
$.ajax({
type : "POST",
//url:url,
data:postData,
success:function(args){
alert("executed");
$("textarea[name=result]").val($(args).find('result'));
},
error:function(xhr, status, errorMsg){
//$("textarea[name=result]").val(errorMsg);
//alert(JSON.parse(xhr.responseText).errorMsg);
}
}); */
});
$("#btn_close").click(function(){
window.close();
});
$("#btn_download").click(function() {
var displayType = $("select[name=displayType]").val();
if(displayType=="FLAT"){
download();
}else{
$("#resultData").val($("#resultTable").html());
$("#excel_form").submit();
}
});
});
function download(){
var resData = document.getElementById("resultData").value;
var resDataBlob = new Blob([resData],{type:'text/plain'});
var fileName = "SQL Result.txt";
var downLink = document.createElement("a");
downLink.download = fileName;
downLink.innerHTML = "Download File";
downLink.href = window.webkitURL.createObjectURL(resDataBlob);
downLink.click();
}
</script>
</head>
<body>
<div class="right_box">
<div class="content_top">
<ul class="path">
<li><a href="#">${rmsMenuPath}</a></li>
</ul>
</div><!-- end content_top -->
<div class="content_middle">
<div class="search_wrap">
<button type="button" class="cssbtn" id="btn_submit" level="W"><i class="material-icons">expand_circle_down</i> <%= localeMessage.getString("button.operate") %></button>
<button type="button" class="cssbtn" id="btn_download" level="W"><i class="material-icons">file_download</i> <%= localeMessage.getString("button.download") %></button>
<%-- <img id="btn_submit" src="<c:url value="/img/btn_operate.png"/>" level="W" style="cursor:hand;"/> --%>
<%-- <img id="btn_download" src="<c:url value="/img/btn_download.png"/>" level="w" style="cursor:hand;"/> --%>
</div>
<div class="title">Data Explorer</div>
<table class="table_row" align="center">
<form method="post" name="runSql">
<tr>
<th align="right" width="80px">
Database :
</th>
<td align="left" width="200px">
<div class="select-style">
<select name="serviceType">
<%
List dsNames = DataSourceTypeManager.getDataSourceTypeNames();
String dsName = "";
for(int i=0; i< dsNames.size(); i++) {
dsName = (String)dsNames.get(i);
%>
<option value="<%= dsName %>"><%= dsName %></option>
<%
}
%>
</select>
</div>
</td>
<th align="right" width="80px">
DIsplay :
</th>
<td align="left">
<div class="select-style">
<select name="displayType">
<option value="FLAT" <%= "FLAT".equals(displayType)?"selected":"" %>>FLAT</option>
<option value="GRID" <%= "GRID".equals(displayType)?"selected":"" %>>GRID</option>
</select>
</div>
</td>
</tr>
<tr>
<td align="left" colspan=4>
<table width="100%">
<tr>
<td class="search_td_title" width="150px"><%= localeMessage.getString("runSql.excute") %> : max fetch size <%= MAX_FETCH_SIZE %></td>
</tr>
<tr>
<td>
<textarea name="statement" style="width:100%;height:200px"><%= statement%></textarea>
<INPUT type=hidden name="run" value="<%=run%>">
</td>
</tr>
</form>
<tr>
<td class="search_td_title" width="150px"><%= localeMessage.getString("runSql.result") %></td>
</tr>
<tr>
<td class="search_td_title" width="150px"><font color=red><%= errorMessage %><font></td>
</tr>
<%
if("FLAT".equals(displayType)) {
%>
<tr>
<td >
<%-- <form name="excel_form" id = "excel_form" action="excelDown.jsp" method="post" target="_blank" style="height : 450px !important">
<input type="text" name="displayType" id="displayType" value="<%=displayType%>">
<textarea id = "resultData" name="resultData" style="width:100%;height:100%"><%= runResult.get("result")%></textarea>
</form> --%>
<textarea id = "resultData" name="resultData" style="width:100%;height:400px"><%= runResult.get("result")%></textarea>
</td>
</tr>
<%
}
else {
HashMap recordsMap = (HashMap)runResult.get("records");
if(recordsMap != null) {
%>
<tr>
<td valign="top"><%
for(int sel=0; sel <= 10;sel++) {
ArrayList resultList = (ArrayList)recordsMap.get("SEL"+sel);
// System.out.println("SEL"+sel+" = "+resultList);
if(resultList == null) {
break;
}
%><form name="excel_form" id = "excel_form" action="excelDown.jsp" method="post" target="_blank">
<input type="hidden" name="resultData" id="resultData">
<input type="hidden" name="displayType" id="displayType" value="<%=displayType%>">
<table width="100%" id="resultTable">
<%
int[] colSize = (int[])resultList.get(0);
int cellWidth = 40;
for(int index = 1; index<resultList.size(); index++ ) {
String[] rows = (String[])resultList.get(index);
%>
<tr>
<%
for(int p = 0; p<rows.length; p++ ) {
if(index==1) {
cellWidth = rows[p].length();
if(colSize[p] > cellWidth) cellWidth = colSize[p];
cellWidth = cellWidth * 10;
out.println(String.format("<th style=\"height : 20px; width:%dpx\">%s</th>", cellWidth, rows[p] ));
}
else {
out.println(String.format("<td style=\"height : 20px\">%s</td>", rows[p]));
}
}
%>
</tr>
<%
}
%>
</table>
</form>
<% }
%>
</td>
</tr>
<%
}
}
%>
</table>
</div><!-- end content_middle -->
</div><!-- end right_box -->
<!-- button -->
</body>
</html>
+4 -2
View File
@@ -35,7 +35,7 @@ java {
languageVersion = JavaLanguageVersion.of(8) languageVersion = JavaLanguageVersion.of(8)
} }
} }
compileJava { compileJava {
options.encoding = 'UTF-8' options.encoding = 'UTF-8'
options.compilerArgs = ['-parameters'] options.compilerArgs = ['-parameters']
@@ -51,7 +51,7 @@ war {
def profile = project.findProperty("profile") ?: "tomcat" def profile = project.findProperty("profile") ?: "tomcat"
if (profile == "weblogic") { if (profile == "weblogic") {
webXml = file("WebContent/WEB-INF/weblogic-web.xml") webXml = file("WebContent/WEB-INF/weblogic-web.xml")
} }
@@ -78,6 +78,8 @@ dependencies {
implementation project(':elink-online-common') implementation project(':elink-online-common')
implementation project(':elink-online-emsclient') implementation project(':elink-online-emsclient')
implementation project(':elink-portal-common') implementation project(':elink-portal-common')
implementation project(':kjb-safedb')
implementation project(":eapim-admin-kjb")
/* Custom Libs */ /* Custom Libs */
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
+75
View File
@@ -0,0 +1,75 @@
# 광주은행용 Property 설정
## 참고 Class
- com.eactive.ext.kjb.common.KjbProperty
## Monitoring
### UMS 관련 (kjb.ums)
- 실제 광주은행 내에서는 UMS 는 SMS/LMS/알림톡 등 만 담당.
- 이메일 발송은 별도 시스템이 있음 (JSON 형식의 파일로 EAI 배치 이용 연계)
- kjb.eai_batch.url
- 개발 : http://172.31.32.111:10230/BATAppWeb/EaiBatCall
- 검증 : http://172.31.33.111:10430/BATAppWeb/EaiBatCall
- 운영 : http://172.21.1.40:10860/BATAppWeb/EaiBatCall
- kjb.ums.host_url
- 개발 : http://172.31.35.144:9021
- 운영 :
- kjb.ums.api_key
- 개발 API KEY(192.168.240.176) : `7cca6d58-e4f7-474d-9edd-525806bc99ff`
- 운영 API KEY(192.168.132.77 / 192.168.132.78 / 192.168.157.77 ) : `6a40a69f-5614-485b-8d0f-6fb2e2e51bfe`
- kjb.ums.eai_batch.send_dir : /Data/eapim/portal/sendmail/snd
- kjb.ums.eai_batch.backup_dir : /Data/eapim/portal/sendmail/bak
## 개발 Property
| Key | 이름 | Value | 분류 | |
| ------------------------------------ | ------------------------ | ----------------------------------------------- | --- | --- |
| kjb.eai_batch.url | EAI 배치 호출 주소 | http://172.31.32.111:10230/BATAppWeb/EaiBatCall | 이메일 | |
| kjb.ums.eai_batch.connection_timeout | EAI 배치 커넥션 타임아웃(seconds) | 5 | 이메일 | |
| kjb.ums.eai_batch.response_timeout | EAI 배치 응답 타임아웃(seconds) | 10 | 이메일 | |
| kjb.ums.eai_batch.send_dir | EAI 배치 발송용 디렉토리 | /Data/eapim/portal/sendmail/snd | 이메일 | |
| kjb.ums.eai_batch.backup_dir | EAI 배치 발송 이후 백업 디렉토리 | /Data/eapim/portal/sendmail/bak | 이메일 | |
| kjb.ums.eai_batch.interface_id | 고객이메일발송용 EAI 배치 인터페이스 | UAGFF00001UIE | 알림톡 | |
| kjb.ums.host_url | UMS 호출 주소 | http://172.31.35.144:9021 | 알림톡 | |
| kjb.ums.api_key | UMS API Key | 7cca6d58-e4f7-474d-9edd-525806bc99ff | 알림톡 | |
| kjb.ums.connection_timeout | UMS 커넥션 타임아웃(seconds) | 5 | 알림톡 | |
| kjb.ums.response_timeout | UMS 응답 타임아웃(seconds) | 10 | 알림톡 | |
| | | | | |
```sql
-- 개발 서버용
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai_batch.url', 'http://172.31.32.111:10230/BATAppWeb/EaiBatCall');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.connection_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.response_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.timeout', '10');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.charset', 'euc-kr');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.send_dir', '/Data/eapim/portal/sendmail/snd');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.backup_dir', '/Data/eapim/portal/sendmail/bak');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.error_dir', '/Data/eapim/portal/sendmail/bak');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.retention_date', '60');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.interface_id', 'UAGFF00001UIE');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.host_url', 'http://172.31.35.144:9021');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.api_key', '7cca6d58-e4f7-474d-9edd-525806bc99ff');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.connection_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.response_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.timeout', '10');
-- autogen template
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.url', '');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.connection_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.response_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.timeout', '10');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.charset', 'euc-kr');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.send_dir', '');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.backup_dir', '');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.error_dir', '');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.interface_id', '');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.retention_date', '60');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.host', '');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.api_key', '');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.connection_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.response_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.timeout', '10');
```
+96
View File
@@ -0,0 +1,96 @@
pipeline {
agent { label 'apipod01' }
environment {
// Java 환경 설정
JAVA_HOME = '/App/jenkins/jdks/jdk1.8.0_441'
PATH = "${JAVA_HOME}/bin:${env.PATH}"
// Gradle 환경 설정
GRADLE_HOME = '/App/jenkins/gradle-8.7'
GRADLE_USER_HOME = '/App/jenkins/gradle-home'
// GRADLE_OPTS = '--offline'
// Git 저장소 정보
GIT_SERVER = '192.168.240.178:18081'
GIT_CREDENTIALS_ID = 'git-ssh-credentials'
// 프로젝트 디렉토리 구조
PROJECT_HOME = '/Data/jenkins/eapim'
BRANCH = 'jenkins_with_weblogic'
}
stages {
stage('Git pull') {
steps {
echo "[admin] Git pull from branch: ${BRANCH}"
dir("${PROJECT_HOME}/eapim-admin") {
git url: "ssh://git@${GIT_SERVER}/eapim/eapim-admin", branch: "${BRANCH}", credentialsId: "${GIT_CREDENTIALS_ID}"
}
echo "[online-core] Git pull from branch: ${BRANCH}"
dir("${PROJECT_HOME}/eapim-online/elink-online-core") {
git url: "ssh://git@${GIT_SERVER}/eapim/elink-online-core", branch: "${BRANCH}", credentialsId: "${GIT_CREDENTIALS_ID}"
}
echo "[online-core-jpa] Git pull from branch: ${BRANCH}"
dir("${PROJECT_HOME}/eapim-online/elink-online-core-jpa") {
git url: "ssh://git@${GIT_SERVER}/eapim/elink-online-core-jpa", branch: "${BRANCH}", credentialsId: "${GIT_CREDENTIALS_ID}"
}
echo "[online-transformer] Git pull from branch: ${BRANCH}"
dir("${PROJECT_HOME}/eapim-online/elink-online-transformer") {
git url: "ssh://git@${GIT_SERVER}/eapim/elink-online-transformer", branch: "${BRANCH}", credentialsId: "${GIT_CREDENTIALS_ID}"
}
echo "[online-common] Git pull from branch: ${BRANCH}"
dir("${PROJECT_HOME}/eapim-online/elink-online-common") {
git url: "ssh://git@${GIT_SERVER}/eapim/elink-online-common", branch: "${BRANCH}", credentialsId: "${GIT_CREDENTIALS_ID}"
}
echo "[online-emsclient] Git pull from branch: ${BRANCH}"
dir("${PROJECT_HOME}/eapim-online/elink-online-emsclient") {
git url: "ssh://git@${GIT_SERVER}/eapim/elink-online-emsclient", branch: "${BRANCH}", credentialsId: "${GIT_CREDENTIALS_ID}"
}
echo "[portal-common] Git pull from branch: ${BRANCH}"
dir("${PROJECT_HOME}/eapim-online/elink-portal-common") {
git url: "ssh://git@${GIT_SERVER}/eapim/elink-portal-common", branch: "${BRANCH}", credentialsId: "${GIT_CREDENTIALS_ID}"
}
echo "[kjb-safedb] Git pull from branch: ${BRANCH}"
dir("${PROJECT_HOME}/kjb-safedb") {
git url: "ssh://git@${GIT_SERVER}/eapim/kjb-safedb", branch: "${BRANCH}", credentialsId: "${GIT_CREDENTIALS_ID}"
}
}
}
stage('Build') {
steps {
tool name: 'Oracle-JDK-1.8', type: 'hudson.model.JDK'
echo "[admin] Build project"
dir("${PROJECT_HOME}/eapim-admin") {
sh '${GRADLE_HOME}/bin/gradle clean build -x test -Pprofile=weblogic'
}
}
}
stage('Archive WAR') {
steps {
echo "[admin] Archive WAR file"
dir("${PROJECT_HOME}/eapim-admin/build/libs") {
archiveArtifacts artifacts: '*.war', fingerprint: true
}
}
}
}
}
+77 -5
View File
@@ -36,21 +36,93 @@ eLink 모듈을 참조하여 구성되어있으며, 추후 필요 모듈외에
### TOMCAT 기동 옵션 참조 ## TOMCAT 기동 옵션 참조
### 은행 개발 서버용
``` ```
-Deai.datasource.type=DEV -Deai.datasource.type=DEV
-Dinst.Name=apimsSvr11 -Dinst.Name=emsSvr11
-Deai.tableowner=ems -Deai.tableowner=EMSADM
-Deai.systemmode=D -Deai.systemmode=D
-Dfile.encoding=utf-8 -Dfile.encoding=utf-8
-DLOGBACK_LOG_LEVEL=info -DLOGBACK_LOG_LEVEL=info
``` ```
### 로컬 개발용
```
-Deai.datasource.type=DEV
-Dinst.Name=emsSvr99
-Deai.tableowner=EMSADM
-Deai.systemmode=D
-Dfile.encoding=utf-8
-Dlogin.mode=db
-DLOGBACK_LOG_LEVEL=DEBUG
-Dlogback.configurationFile=classpath:logback-dev.xml
-Dhibernate.dialect=org.hibernate.dialect.Oracle12cDialect
-Dkjb_safedb.mode=none
```
## 광주은행 커스텀 관련
### Gradle 빌드 옵션 ### Gradle 빌드 옵션
```bash ```bash
# Weblogic 배포용 (테스트 제외) # Weblogic 배포용 (테스트 제외)
gradle build -x test -Pprofile=weblogic gradle build -x test -Pprofile=weblogic
``` ```
- -Pprofile=weblogic 사용시 weblogic-web.xml 을 web.xml 로 사용 (DefaultServlet 이슈) - -Pprofile=weblogic 사용시 weblogic-web.xml 을 web.xml 로 사용 (DefaultServlet 이슈)
## 광주은행 참고 사항
### PORTAL Parameter
- deploy.prod_use_proxy = N (개발/운영 망 간 연동 없음)
- kjb.ums.eai_batch.url : EAI 배치 서버 URL (이메일 발송 용도)
- 개발 : http://172.31.32.111:10230/BATAppWeb/EaiBatCall
- QA : http://172.31.33.111:10430/BATAppWeb/EaiBatCall
- 운영 : http://172.21.1.40:10860/BATAppWeb/EaiBatCall
- 입력하지 않을 경우 EAI 배치 호출을 하지 않고 내부적으로 통신하지 않고 정상 처리(log 내 warning 로그)
- kjb.ums.eai_batch.send_dir : EAI 배치 서버 파일 송신 디렉토리
- Default : /Data/eapim/portal/sendmail
- -Pprofile=weblogic 사용시 weblogic-web.xml 을 web.xml 로 사용 (DefaultServlet 이슈)
### 추가 파라미터
```sql
-- 은행 개발 서버용
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai_batch.url', 'http://172.31.32.111:10230/BATAppWeb/EaiBatCall');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.connection_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.response_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.timeout', '10');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.charset', 'euc-kr');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.send_dir', '/Data/eapim/portal/sendmail/snd');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.backup_dir', '/Data/eapim/portal/sendmail/bak');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.error_dir', '/Data/eapim/portal/sendmail/bak');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.retention_date', '60');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.interface_id', 'UAGFF00001UIE');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.host_url', 'http://172.31.35.144:9021');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.api_key', '7cca6d58-e4f7-474d-9edd-525806bc99ff');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.connection_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.response_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.timeout', '10');
commit;
-- 로컬 개발용 (외부)
--insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai_batch.url', '');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.connection_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.response_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.timeout', '10');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.charset', 'euc-kr');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.send_dir', '/Data/eapim/portal/sendmail/snd');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.backup_dir', '/Data/eapim/portal/sendmail/bak');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.error_dir', '/Data/eapim/portal/sendmail/bak');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.retention_date', '60');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.interface_id', 'UAGFF00001UIE');
-- insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.host_url', '');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.api_key', '7cca6d58-e4f7-474d-9edd-525806bc99ff');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.connection_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.response_timeout', '5');
insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.timeout', '10');
commit;
```
+3 -1
View File
@@ -7,6 +7,7 @@ include 'elink-online-common'
include 'elink-online-emsclient' include 'elink-online-emsclient'
include 'elink-portal-common' include 'elink-portal-common'
include 'kjb-safedb' include 'kjb-safedb'
include 'eapim-admin-kjb'
project (':elink-online-core-jpa').projectDir = new File(settingsDir, "../eapim-online/elink-online-core-jpa") project (':elink-online-core-jpa').projectDir = new File(settingsDir, "../eapim-online/elink-online-core-jpa")
project (':elink-online-core').projectDir = new File(settingsDir, "../eapim-online/elink-online-core") project (':elink-online-core').projectDir = new File(settingsDir, "../eapim-online/elink-online-core")
@@ -14,4 +15,5 @@ project (':elink-online-transformer').projectDir = new File(settingsDir, "../eap
project (':elink-online-common').projectDir = new File(settingsDir, "../eapim-online/elink-online-common") project (':elink-online-common').projectDir = new File(settingsDir, "../eapim-online/elink-online-common")
project (':elink-online-emsclient').projectDir = new File(settingsDir, "../eapim-online/elink-online-emsclient") project (':elink-online-emsclient').projectDir = new File(settingsDir, "../eapim-online/elink-online-emsclient")
project (':elink-portal-common').projectDir = new File(settingsDir, "../elink-portal-common") project (':elink-portal-common').projectDir = new File(settingsDir, "../elink-portal-common")
project (':kjb-safedb').projectDir = new File(settingsDir, "../kjb-safedb") project (':kjb-safedb').projectDir = new File(settingsDir, "../kjb-safedb")
project (':eapim-admin-kjb').projectDir = new File(settingsDir, "eapim-admin-kjb")
@@ -3,6 +3,8 @@ package com.eactive.eai.custom;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
import com.eactive.eai.rms.data.PortalSchemaProviderHolder;
import com.eactive.eai.rms.env.EmsConfig;
import com.eactive.eai.transformer.message.ISO8583MessageFactory; import com.eactive.eai.transformer.message.ISO8583MessageFactory;
/** /**
@@ -36,5 +38,8 @@ public class CustomizingAppInitializer implements InitializingBean {
logger.info(String.format("ISO8583MessageFactory registered - %s = %s", MESSAGE_TYPE_SVL, ISO8583_SVL_CLASS_NAME)); logger.info(String.format("ISO8583MessageFactory registered - %s = %s", MESSAGE_TYPE_SVL, ISO8583_SVL_CLASS_NAME));
logger.info(String.format("ISO8583MessageFactory registered - %s = %s", LAYOUT_TYPE_H2H, ISO8583_H2H_CLASS_NAME)); logger.info(String.format("ISO8583MessageFactory registered - %s = %s", LAYOUT_TYPE_H2H, ISO8583_H2H_CLASS_NAME));
logger.info(String.format("ISO8583MessageFactory registered - %s = %s", LAYOUT_TYPE_SVL, ISO8583_SVL_CLASS_NAME)); logger.info(String.format("ISO8583MessageFactory registered - %s = %s", LAYOUT_TYPE_SVL, ISO8583_SVL_CLASS_NAME));
// PortalSchemaProviderHolder 초기화 (eai.tableowner 주입)
PortalSchemaProviderHolder.setProvider(() -> System.getProperty(EmsConfig.TABLE_OWNER));
} }
} }
@@ -53,7 +53,7 @@ public class BapConnSessionController extends BapBaseAnnotationController {
} }
@RequestMapping(value= "/bap/adapter/socket/connStatus.json", params = "cmd=TRANSACTION") @RequestMapping(value= "/bap/adapter/socket/connStatus.json", params = "cmd=CONTROL")
public ModelAndView control(HttpServletRequest request, String startStop, String uuid) throws Exception { public ModelAndView control(HttpServletRequest request, String startStop, String uuid) throws Exception {
String[] args = new String[4]; String[] args = new String[4];
@@ -80,7 +80,7 @@ public class BapTelePropertyController extends BapBaseAnnotationController {
HashMap<String, Object>[] list = gson.fromJson(gridData, HashMap[].class); HashMap<String, Object>[] list = gson.fromJson(gridData, HashMap[].class);
service.insert(map,list); service.insert(map,list);
CommonCommand command = new CommonCommand("com.eactive.eai.agent.teleproperty.UpdatePropertyCommand",(String)map.get("prptyGroupName")); CommonCommand command = new CommonCommand("com.eactive.eai.agent.property.UpdatePropertyCommand",(String)map.get("prptyGroupName"));
agentUtilService.broadcast(command); agentUtilService.broadcast(command);
return null; return null;
@@ -94,7 +94,7 @@ public class BapTelePropertyController extends BapBaseAnnotationController {
HashMap<String, Object>[] list = gson.fromJson(gridData, HashMap[].class); HashMap<String, Object>[] list = gson.fromJson(gridData, HashMap[].class);
service.update(map,list); service.update(map,list);
CommonCommand command = new CommonCommand("com.eactive.eai.agent.teleproperty.UpdatePropertyCommand",(String)map.get("prptyGroupName")); CommonCommand command = new CommonCommand("com.eactive.eai.agent.property.UpdatePropertyCommand",(String)map.get("prptyGroupName"));
agentUtilService.broadcast(command); agentUtilService.broadcast(command);
return null; return null;
@@ -107,7 +107,7 @@ public class BapTelePropertyController extends BapBaseAnnotationController {
paramMap.put("prptyGroupName", prptyGroupName); paramMap.put("prptyGroupName", prptyGroupName);
service.delete(paramMap); service.delete(paramMap);
CommonCommand command = new CommonCommand("com.eactive.eai.agent.teleproperty.RemovePropertyCommand",prptyGroupName); CommonCommand command = new CommonCommand("com.eactive.eai.agent.property.RemovePropertyCommand",prptyGroupName);
agentUtilService.broadcast(command); agentUtilService.broadcast(command);
return null; return null;
@@ -101,7 +101,7 @@ public class BapServerController extends BapBaseAnnotationController {
public ModelAndView initCombo( HttpServletRequest request, public ModelAndView initCombo( HttpServletRequest request,
HttpServletResponse response,String eaiSvcName) throws Exception { HttpServletResponse response,String eaiSvcName) throws Exception {
List<Map<String, Object>> listServer = ibatisComboService.selectListComboForTable("TSEAICM20", "code", "codename","codegroup = 'YN' "); List<Map<String, Object>> listServer = ibatisComboService.selectListComboForTable("TSEAIBP03","EAISEVRINSTNCNAME","EAISEVRINSTNCNAME");
Map<String, Object> resultMap = new HashMap<String, Object>(); Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("serverRows" , listServer); resultMap.put("serverRows" , listServer);
@@ -88,7 +88,7 @@ public class BapClassMapController extends BapBaseAnnotationController {
HttpServletResponse response,@RequestParam HashMap<String,Object> map ) throws Exception { HttpServletResponse response,@RequestParam HashMap<String,Object> map ) throws Exception {
// 전문클래스ID 공백 제거 // 전문클래스ID 공백 제거
map.replace("telgmClsID",map.get("telgmClsID").toString().trim()); // map.replace("telgmClsID",map.get("telgmClsID").toString().trim());
service.insert(map); service.insert(map);
CommonCommand command = new CommonCommand("com.eactive.eai.agent.rule.telegraminfo.UpdateTelegramInfoCommand", map.get("telgmClsID")); CommonCommand command = new CommonCommand("com.eactive.eai.agent.rule.telegraminfo.UpdateTelegramInfoCommand", map.get("telgmClsID"));
@@ -1,8 +1,6 @@
package com.eactive.eai.rms.bap.manage.message.messageMeta; package com.eactive.eai.rms.bap.manage.message.messageMeta;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@@ -122,88 +120,5 @@ public class BapMessageMetaController extends BapBaseAnnotationController {
return null; return null;
} }
@RequestMapping(value= "/bap/admin/message/messageMetaMan.json",params = "cmd=LIST_DELETE")
public String deleteList(HttpServletRequest request,
HttpServletResponse response, @RequestParam HashMap<String, Object> paramMap ) throws Exception {
for (String msgMetaDstcd : paramMap.get("msgMetaDstcdList").toString().split(",")) {
HashMap<String, Object> paramDetail = new HashMap<String,Object>();
paramDetail.put("msgMetaDstcd", msgMetaDstcd);
service.delete(paramDetail);
}
return null;
}
@SuppressWarnings("unchecked")
@RequestMapping(value= "/bap/admin/message/messageMetaMan.json",params = "cmd=CLONE")
public ModelAndView clone(HttpServletRequest request,
HttpServletResponse response,@RequestParam HashMap<String,Object> map) throws Exception {
String msgMetaDstcd = map.get("msgMetaDstcd").toString();
HashMap<String, Object> detailMap = service.selectDetail(msgMetaDstcd);
HashMap<String, Object> detail = (HashMap<String, Object>)detailMap.get("detail");
List<Map<String, Object>> list = (List<Map<String, Object>>)detailMap.get("list");
// detail insert 데이터키 치환 (insert_bm03)
String newMsgMetaDstcd = map.get("newMsgMetaDstcd").toString();
detail.put("msgMetaDstcd", newMsgMetaDstcd);
detail.put("msgDesc" , map.get("newMsgDesc") != null ? map.get("newMsgDesc") : detail.get("MSGDESC"));
detail.put("thisMsgUseYn", detail.get("THISMSGUSEYN"));
String searchMsgMetaDstcd = map.get("searchMsgMetaDstcd").toString();
String cloneMsgMetaDstcd = map.get("cloneMsgMetaDstcd").toString();
// gridList insert 데이터키 치환 (insert_bm02)
HashMap<String, Object>[] gridList = list.toArray(new HashMap[list.size()]);
for (int i=0; i<list.size(); i++) {
Map<String, Object> listMap = (Map<String, Object>)list.get(i);
gridList[i].put("msgMetaDstcd" , ((String)listMap.get("MSGMETADSTCD")).replace(searchMsgMetaDstcd,cloneMsgMetaDstcd));
gridList[i].put("thisMsgUseYn" , listMap.get("THISMSGCLMNUSEYN"));
// 메시지항목명을 치환하면 메시지항목 테이블(BM01)에 항목이 없으므로 메타 Item 리스트에 보이지 않음 --> 치환 안함으로 변경
// gridList[i].replace("MSGITEMDSTICNAME" , ((String)listMap.get("MSGITEMDSTICNAME")).replace(searchMsgMetaDstcd,cloneMsgMetaDstcd));
gridList[i].replace("MSGITEMDSTICNAME" , listMap.get("MSGITEMDSTICNAME"));
gridList[i].replace("MSGCLMNSEQ" , listMap.get("MSGCLMNSEQ"));
}
String userid = com.eactive.eai.rms.common.login.SessionManager.getUserId(request); }
detail.put("userid", userid );
service.insert(detail,gridList);
CommonCommand command = new CommonCommand("com.eactive.eai.agent.telegram.UpdateTelegramCommand",map.get("newMsgMetaDstcd"));
agentUtilService.broadcast(command);
HashMap<String, Object> result = new HashMap<String, Object>();
result.put("detail",detail);
result.put("list",gridList);
ModelAndView modelAndView = new ModelAndView("jsonView", result);
return modelAndView;
}
@SuppressWarnings("unchecked")
@RequestMapping(value= "/bap/admin/message/messageMetaMan.json",params = "cmd=LIST_DOWNLOAD_SQL")
public ModelAndView downloadSql(HttpServletRequest request,
HttpServletResponse response,@RequestParam HashMap<String,Object> map) throws Exception {
List<Map<String, Object>> msgMetaList = new ArrayList<Map<String, Object>>();
for (String searchMsgMetaDstcd : map.get("searchMsgMetaDstcdList").toString().split(",")) {
HashMap<String, Object> msgMeta = service.selectDetail(searchMsgMetaDstcd);
msgMetaList.add((Map<String, Object>)msgMeta.get("detail"));
}
HashMap<String,Object> messageMeta = new HashMap<String,Object>();
messageMeta.put("list", msgMetaList);
messageMeta.put("userid",com.eactive.eai.rms.common.login.SessionManager.getUserId(request));
messageMeta.put("fileName", map.get("fileName"));
messageMeta.put("svrType", map.get("svrType"));
ModelAndView modelAndView = new ModelAndView("jsonView",service.mkInserSqlForMsgMeta(messageMeta));
return modelAndView;
}
@RequestMapping(value= "/bap/admin/message/messageMetaMan.view",params = "cmd=LIST_FILE_DOWNLOAD")
public String fileDownload(HttpServletRequest request) throws Exception {
return "/bap/admin/common/filedownload";
}
}
@@ -1,9 +1,5 @@
package com.eactive.eai.rms.bap.manage.message.messageMeta; package com.eactive.eai.rms.bap.manage.message.messageMeta;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -13,8 +9,6 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.eactive.eai.rms.bap.common.base.BapBaseService; import com.eactive.eai.rms.bap.common.base.BapBaseService;
import com.eactive.eai.rms.bap.manage.comm.property.BapPropertyDao;
import com.eactive.eai.rms.common.util.SqlUtil;
@Service("bapMessageMetaService") @Service("bapMessageMetaService")
public class BapMessageMetaService extends BapBaseService { public class BapMessageMetaService extends BapBaseService {
@@ -23,17 +17,13 @@ public class BapMessageMetaService extends BapBaseService {
@Qualifier("bapMessageMetaDao") @Qualifier("bapMessageMetaDao")
private BapMessageMetaDao dao; private BapMessageMetaDao dao;
@Autowired
@Qualifier("bapPropertyDao")
private BapPropertyDao propDao;
public HashMap<String, Object> selectList(int startNum,int endNum, HashMap<String, Object> paramMap) throws Exception { public HashMap<String, Object> selectList(int startNum,int endNum, HashMap<String, Object> paramMap) throws Exception {
// 전체 목록수 얻기 // 전체 목록 수 얻기
int totalCount = dao.selectListCount(paramMap); int totalCount = dao.selectListCount(paramMap);
paramMap.put("startNum" , startNum);// 시작 record paramMap.put("startNum" , startNum);// record
paramMap.put("endNum" , endNum);// record paramMap.put("endNum" , endNum);// record
List<Map<String, Object>> list = dao.selectList(paramMap); List<Map<String, Object>> list = dao.selectList(paramMap);
HashMap<String, Object> map = new HashMap<String, Object>(); HashMap<String, Object> map = new HashMap<String, Object>();
@@ -44,11 +34,6 @@ public class BapMessageMetaService extends BapBaseService {
return map; return map;
} }
public int selectTotalCount(HashMap<String, Object> paramMap) throws Exception {
return dao.selectListCount(paramMap); // 전체 목록수 얻기
}
public HashMap<String, Object> selectDetail(String msgMetaDstcd) throws Exception { public HashMap<String, Object> selectDetail(String msgMetaDstcd) throws Exception {
HashMap<String, Object> detail = dao.selectDetail(msgMetaDstcd); HashMap<String, Object> detail = dao.selectDetail(msgMetaDstcd);
@@ -94,162 +79,4 @@ public class BapMessageMetaService extends BapBaseService {
dao.deleteList(paramMap); dao.deleteList(paramMap);
} }
@SuppressWarnings("unchecked") }
public HashMap<String,String> mkInserSqlForMsgMeta(HashMap<String, Object> msgMetaMap) throws Exception {
StringBuffer msgMetaInsertSql = new StringBuffer();
String[] columnUserId = {"THISMSGREGSNTID","THISMSGAMNDRID","THISMSGCLMNREGSNTID","THISMSGCLMNAMNDRID"}; // userID 입력컬럼 구분
String[] columnDateTime = {"THISMSGREGIHMS","THISMSGAMNDHMS","THISMSGCLMNREGIHMS","THISMSGCLMNAMNDHMS"}; // DateTime 입력컬럼 구분
List<Map<String, Object>> msgMetaList = (List<Map<String, Object>>)msgMetaMap.get("list");
String userid = msgMetaMap.containsKey("userid") ? msgMetaMap.get("userid").toString() : "";
for (Map<String,Object> meta : msgMetaList) {
// MESSAGE META LIST into BM03
List<String> columnArr = new ArrayList<String>();
String[] columnList = {"MSGMETADSTCD","MSGDESC","THISMSGUSEYN","THISMSGREGSNTID","THISMSGREGIHMS","THISMSGAMNDRID","THISMSGAMNDHMS"};
columnArr = Arrays.asList(columnList);
msgMetaInsertSql.append("INSERT INTO EAIPKG.TSEAIBM03 (");
// 필드명 입력
for (String column : columnArr) {
msgMetaInsertSql.append((column.equals(columnArr.get(columnArr.size()-1))) ? column : column+",");
}
msgMetaInsertSql.append(") VALUES (");
// 필드값 입력
for (String column : columnArr) {
if (column.equals(columnArr.get(columnArr.size()-1))) {
if (Arrays.asList(columnUserId).contains(column)) {
msgMetaInsertSql.append("'"+userid+"');\n");
} else if (Arrays.asList(columnDateTime).contains(column)) {
msgMetaInsertSql.append("TO_CHAR(LOCALTIMESTAMP, 'YYYYMMDDHH24MISSFF3'));\n");
} else {
msgMetaInsertSql.append("'"+(meta.containsKey(column) ? meta.get(column) : "")+"');\n");
}
} else {
if (Arrays.asList(columnUserId).contains(column)) {
msgMetaInsertSql.append("'"+userid+"',");
} else if (Arrays.asList(columnDateTime).contains(column)) {
msgMetaInsertSql.append("TO_CHAR(LOCALTIMESTAMP, 'YYYYMMDDHH24MISSFF3'),");
} else {
msgMetaInsertSql.append("'"+(meta.containsKey(column) ? meta.get(column) : "")+"',");
}
}
}
HashMap<String, Object> metaMap = selectDetail(meta.get("MSGMETADSTCD").toString());
List<Map<String, Object>> metaItemList = (List<Map<String, Object>>)metaMap.get("list");
// MESSAGE META LIST into BM02
for (Map<String, Object> metaItem : metaItemList) {
List<String> columnItemArr = new ArrayList<String>();
String[] columnItemList = {"MSGMETADSTCD","MSGCLMNSEQ","MSGITEMDSTICNAME","THISMSGCLMNUSEYN","THISMSGREGSNTID","THISMSGREGIHMS","THISMSGAMNDRID","THISMSGAMNDHMS"};
columnItemArr = Arrays.asList(columnItemList);
msgMetaInsertSql.append("INSERT INTO EAIPKG.TSEAIBM02 (MSGGROUPDSTCD,");
// 필드명 입력
for (String columnItem : columnItemArr) {
if (columnItem.equals("MSGMETADSTCD")) continue;
msgMetaInsertSql.append((columnItem.equals(columnItemArr.get(columnItemArr.size()-1))) ? columnItem : columnItem+",");
}
msgMetaInsertSql.append(") VALUES (");
// 필드값 입력
for (String column : columnItemArr) {
if (column.equals(columnItemArr.get(columnItemArr.size()-1))) {
if (Arrays.asList(columnUserId).contains(column)) {
msgMetaInsertSql.append("'"+userid+"');\n");
} else if (Arrays.asList(columnDateTime).contains(column)) {
msgMetaInsertSql.append("TO_CHAR(LOCALTIMESTAMP, 'YYYYMMDDHH24MISSFF3'));\n");
} else {
msgMetaInsertSql.append("'"+(metaItem.containsKey(column) ? metaItem.get(column) : "")+"');\n");
}
} else {
if (Arrays.asList(columnUserId).contains(column)) {
msgMetaInsertSql.append("'"+userid+"',");
} else if (Arrays.asList(columnDateTime).contains(column)) {
msgMetaInsertSql.append("TO_CHAR(LOCALTIMESTAMP, 'YYYYMMDDHH24MISSFF3'),");
} else {
msgMetaInsertSql.append("'"+(metaItem.containsKey(column) ? metaItem.get(column) : "")+"',");
}
}
}
}
// MESSAGE META LIST into BM01
for (Map<String, Object> metaItem : metaItemList) {
List<String> columnClmArr = new ArrayList<String>();
String[] columnClmList = {"MSGITEMDSTICNAME","THISMSGCLMNUSEYN","MSGCLMNNAME","MSGCLMNATTRIPTRNCD","MSGCLMNVAL","THISMSGCLMNREGSNTID","THISMSGCLMNREGIHMS","THISMSGCLMNAMNDRID","THISMSGCLMNAMNDHMS"};
columnClmArr = Arrays.asList(columnClmList);
msgMetaInsertSql.append("MERGE INTO EAIPKG.TSEAIBM01 r USING (VALUES(");
// 필드값 입력
for (String column : columnClmArr) {
if (column.equals(columnClmArr.get(columnClmArr.size()-1))) {
if (Arrays.asList(columnUserId).contains(column)) {
msgMetaInsertSql.append("'"+userid+"')) ");
} else if (Arrays.asList(columnDateTime).contains(column)) {
msgMetaInsertSql.append("TO_CHAR(LOCALTIMESTAMP, 'YYYYMMDDHH24MISSFF3'))) ");
} else {
msgMetaInsertSql.append("'"+(metaItem.containsKey(column) ? metaItem.get(column) : "")+"')) ");
}
} else {
if (Arrays.asList(columnUserId).contains(column)) {
msgMetaInsertSql.append("'"+userid+"',");
} else if (Arrays.asList(columnDateTime).contains(column)) {
msgMetaInsertSql.append("TO_CHAR(LOCALTIMESTAMP, 'YYYYMMDDHH24MISSFF3'),");
} else {
msgMetaInsertSql.append("'"+(metaItem.containsKey(column) ? metaItem.get(column) : "")+"',");
}
}
}
// 필드명 입력
msgMetaInsertSql.append("AS s(");
for (String columnClm : columnClmArr) {
msgMetaInsertSql.append((columnClm.equals(columnClmArr.get(columnClmArr.size()-1))) ? columnClm+")\n" : columnClm+",");
}
msgMetaInsertSql.append("ON r.MSGITEMDSTICNAME = s.MSGITEMDSTICNAME WHEN NOT MATCHED THEN\n");
msgMetaInsertSql.append("INSERT (");
for (String columnClm : columnClmArr) {
msgMetaInsertSql.append((columnClm.equals(columnClmArr.get(columnClmArr.size()-1))) ? "r."+columnClm : "r."+columnClm+",");
}
msgMetaInsertSql.append(") VALUES (");
for (String columnClm : columnClmArr) {
msgMetaInsertSql.append((columnClm.equals(columnClmArr.get(columnClmArr.size()-1))) ? "s."+columnClm+");\n" : "s."+columnClm+",");
}
}
}
HashMap<String,String> retMap = new HashMap<String,String>();
if (msgMetaMap.get("fileName") != null) {
OutputStream output = null;
try {
String sqlDownloadPath = getProperties("SQL_DOWNLOAD", "DOWNLOAD_PATH");
String sqlDownloadFile = sqlDownloadPath+msgMetaMap.get("fileName");
output = new FileOutputStream(sqlDownloadFile);
if (sqlDownloadPath != null) {
byte[] bt = msgMetaInsertSql.toString().getBytes();
output.write(bt);
output.close();
}
retMap.put("path", sqlDownloadPath);
} catch (Exception e) {
logger.error( e.getMessage(), e);
} finally {
if(output != null) try { output.close(); } catch(Exception ee) {logger.error( ee.getMessage(), ee);}
}
} else {
retMap = SqlUtil.executeSql(msgMetaInsertSql.toString(), "BAP_"+msgMetaMap.get("svrType").toString().toUpperCase());
}
return retMap;
}
private String getProperties(String propGroup, String propName) throws Exception {
HashMap<String,Object> params = new HashMap<String,Object>();
params.put("prptyGroupName", propGroup);
params.put("prptyName", propName);
HashMap<String, Object> props = propDao.getProperties(params);
return props.get("PRPTY2VAL").toString();
}
}
@@ -137,20 +137,20 @@ public class BapMessageProcController extends BapBaseAnnotationController {
List<Map<String, Object>> bjobBzwkDstcd = comboService.selectListComboForTableWithCode("TSEAIBJ02", "BJOBBZWKDSTCD", "BJOBBZWKNAME"); List<Map<String, Object>> bjobBzwkDstcd = comboService.selectListComboForTableWithCode("TSEAIBJ02", "BJOBBZWKDSTCD", "BJOBBZWKNAME");
List<Map<String, Object>> bjobInstiDstcd = comboService.selectListComboForTableWithCode("TSEAIBJ06", "OSIDINSTIDSTCD", "OSIDINSTINAME"); List<Map<String, Object>> bjobInstiDstcd = comboService.selectListComboForTableWithCode("TSEAIBJ06", "OSIDINSTIDSTCD", "OSIDINSTINAME");
// //
// List<Map<String, Object>> sysCd = comboService.selectListComboForTableWithCode("TSEAIBJ11", "SYSCD", "SYSNAME"); List<Map<String, Object>> sysCd = comboService.selectListComboForTableWithCode("TSEAIBJ11", "SYSCD", "SYSNAME");
List<Map<String, Object>> uapplCd = //comboService.selectListComboForTableWithCode("TSEAICM01", "TRIM(EAIBZWKDSTCD)", "BZWKDSTICNAME"); // List<Map<String, Object>> uapplCd = //comboService.selectListComboForTableWithCode("TSEAICM01", "TRIM(EAIBZWKDSTCD)", "BZWKDSTICNAME");
comboService.selectListComboForTable("TSEAICM01", "TRIM(EAIBZWKDSTCD)", "BZWKDSTICNAME","systeminoutdstcd = 'I' "); // comboService.selectListComboForTable("TSEAICM01", "TRIM(EAIBZWKDSTCD)", "BZWKDSTICNAME","systeminoutdstcd = 'I' ");
List<Map<String, Object>> bJobCycleGb = //comboService.selectListCombo("BAP_CYCLE_GB"); // BATCH작업주기구분 // List<Map<String, Object>> bJobCycleGb = //comboService.selectListCombo("BAP_CYCLE_GB"); // BATCH작업주기구분
comboService.selectListComboForTable("TSEAICM20", "code", "codename","codegroup = 'BAP_CYCLE_GB' "); // comboService.selectListComboForTable("TSEAICM20", "code", "codename","codegroup = 'BAP_CYCLE_GB' ");
Map<String, Object> resultMap = new HashMap<String, Object>(); Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("bjobBzwkDstcd" , bjobBzwkDstcd); resultMap.put("bjobBzwkDstcd" , bjobBzwkDstcd);
resultMap.put("bjobInstiDstcd", bjobInstiDstcd); resultMap.put("bjobInstiDstcd", bjobInstiDstcd);
// resultMap.put("groupCoCd" , groupCoCd); // resultMap.put("groupCoCd" , groupCoCd);
// resultMap.put("sysCd" , sysCd); resultMap.put("sysCd" , sysCd);
resultMap.put("uapplCd" , uapplCd); // resultMap.put("uapplCd" , uapplCd);
resultMap.put("bJobCycleGb" , bJobCycleGb); // resultMap.put("bJobCycleGb" , bJobCycleGb);
ModelAndView modelAndView = new ModelAndView("jsonView",resultMap); ModelAndView modelAndView = new ModelAndView("jsonView",resultMap);
return modelAndView; return modelAndView;
@@ -159,21 +159,13 @@ public class BapMessageProcController extends BapBaseAnnotationController {
@RequestMapping(value= "/bap/admin/work/messageProcMan.json",params = "cmd=LIST_PROP") @RequestMapping(value= "/bap/admin/work/messageProcMan.json",params = "cmd=LIST_PROP")
public ModelAndView getProps( HttpServletRequest request, public ModelAndView getProps( HttpServletRequest request,
HttpServletResponse response, HttpServletResponse response,
@RequestParam String bjobBzwkDstcd, @RequestParam String bjobBzwkDstcd
@RequestParam String bjobMsgDstcd
) throws Exception { ) throws Exception {
Map<String, Object> resultMap = new HashMap<String, Object>(); HashMap<String, Object> map = service.getProps(bjobBzwkDstcd);
if(!StringUtils.isEmpty(bjobBzwkDstcd)) { ModelAndView modelAndView = new ModelAndView("jsonView", map);
HashMap<String, Object> propMap = service.getProps(bjobBzwkDstcd, bjobMsgDstcd); // 프로퍼티 정보
HashMap<String, Object> InstMap = service.selectOsidInstiDstcd(bjobBzwkDstcd);
resultMap.put("propMap", propMap);
resultMap.put("InstMap", InstMap);
}
ModelAndView modelAndView = new ModelAndView("jsonView", resultMap);
return modelAndView; return modelAndView;
} }
@@ -87,4 +87,9 @@ public class BapMessageProcDao extends SqlMapClientTemplateDao {
public void deleteVerifyInfo(HashMap<String, Object> param) throws Exception{ public void deleteVerifyInfo(HashMap<String, Object> param) throws Exception{
this.template.delete("BapMessageProc.deleteVerifyInfo", param); this.template.delete("BapMessageProc.deleteVerifyInfo", param);
} }
public void deleteBS01(HashMap<String, Object> param) throws Exception{
this.template.delete("BapMessageProc.deleteBS01", param);
}
} }
@@ -43,9 +43,10 @@ public class BapMessageProcService extends BapBaseService {
HashMap<String, Object> detail = dao.selectDetail(param); HashMap<String, Object> detail = dao.selectDetail(param);
String bjobBzwkDstcd = (String)detail.get("BJOBBZWKDSTCD"); String bjobBzwkDstcd = (String)detail.get("BJOBBZWKDSTCD");
String bjobMsgDstcd = (String)detail.get("BJOBMSGDSTCD"); String bjobTranDstcdName = (String)detail.get("BJOBTRANDSTCDNAME");
param.put("bjobBzwkDstcd", bjobBzwkDstcd ); param.put("bjobBzwkDstcd", bjobBzwkDstcd );
param.put("propGroupName", "TelegramInfo{" + bjobMsgDstcd + "}"); param.put("propGroupName", "TelegramInfo{" + bjobBzwkDstcd + "_" + bjobTranDstcdName + "}");
List<Map<String, Object>> list = dao.getProps(param); List<Map<String, Object>> list = dao.getProps(param);
HashMap<String, Object> map = new HashMap<String, Object>(); HashMap<String, Object> map = new HashMap<String, Object>();
@@ -75,9 +76,8 @@ public class BapMessageProcService extends BapBaseService {
} }
} }
public void insert(HashMap<String, Object> paramMap, HashMap<String, Object>[] list, HashMap<String, Object> connList) throws Exception { public void insert(HashMap<String, Object> paramMap, HashMap<String, Object>[] list, HashMap<String, Object> connList) throws Exception {
paramMap.put( "bjobMsgDstcd", dao.generatePK(paramMap));
// paramMap.put( "bjobMsgDstcd", dao.generatePK(paramMap));
dao.insert(paramMap); dao.insert(paramMap);
telePropDao.delete(paramMap); telePropDao.delete(paramMap);
telePropDao.deleteProperty(paramMap); telePropDao.deleteProperty(paramMap);
@@ -99,7 +99,8 @@ public class BapMessageProcService extends BapBaseService {
public void delete(HashMap<String, Object> paramMap) throws Exception { public void delete(HashMap<String, Object> paramMap) throws Exception {
dao.delete(paramMap); dao.delete(paramMap);
dao.deleteVerifyInfo(paramMap); // dao.deleteVerifyInfo(paramMap);
dao.deleteBS01(paramMap);
telePropDao.delete(paramMap); telePropDao.delete(paramMap);
telePropDao.deleteProperty(paramMap); telePropDao.deleteProperty(paramMap);
} }
@@ -114,6 +115,18 @@ public class BapMessageProcService extends BapBaseService {
map.put("rows", list); map.put("rows", list);
return map; return map;
} }
public HashMap<String, Object> getProps(String bjobBzwkDstcd) throws Exception {
HashMap<String, Object> param = new HashMap<String, Object>();
param.put("bjobBzwkDstcd", bjobBzwkDstcd);
List<Map<String, Object>> list = dao.getProps(param);
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("rows", list);
return map;
}
public HashMap<String, Object> selectOsidInstiDstcd(String bjobBzwkDstcd) throws Exception { public HashMap<String, Object> selectOsidInstiDstcd(String bjobBzwkDstcd) throws Exception {
@@ -92,14 +92,14 @@ public class BapProcWorkController extends BapBaseAnnotationController {
List<Map<String, Object>> bjobBzwkDstcd = comboService.selectListComboForTableWithCode("TSEAIBJ02", "BJOBBZWKDSTCD", "BJOBBZWKNAME"); List<Map<String, Object>> bjobBzwkDstcd = comboService.selectListComboForTableWithCode("TSEAIBJ02", "BJOBBZWKDSTCD", "BJOBBZWKNAME");
List<Map<String, Object>> osidInstiDstcd = statusService.selectOsidInstiDstcd(""); List<Map<String, Object>> osidInstiDstcd = statusService.selectOsidInstiDstcd("");
List<Map<String, Object>> svcPrcssNo = comboService.selectListComboForTable("TSEAICM20", "code", "codename","codegroup = 'SVC_PRCSS_NO' "); // List<Map<String, Object>> svcPrcssNo = comboService.selectListComboForTable("TSEAICM20", "code", "codename","codegroup = 'SVC_PRCSS_NO' ");
//comboService.selectListCombo("SVC_PRCSS_NO"); //comboService.selectListCombo("SVC_PRCSS_NO");
Map<String, Object> resultMap = new HashMap<String, Object>(); Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("bjobBzwkDstcd" , bjobBzwkDstcd); resultMap.put("bjobBzwkDstcd" , bjobBzwkDstcd);
resultMap.put("osidInstiDstcd" , osidInstiDstcd); resultMap.put("osidInstiDstcd" , osidInstiDstcd);
resultMap.put("svcPrcssNo" , svcPrcssNo); // resultMap.put("svcPrcssNo" , svcPrcssNo);
ModelAndView modelAndView = new ModelAndView("jsonView",resultMap); ModelAndView modelAndView = new ModelAndView("jsonView",resultMap);
return modelAndView; return modelAndView;
@@ -50,43 +50,63 @@ public class BapTransactionStatusController extends BapBaseAnnotationController
* @throws Exception * @throws Exception
*/ */
@RequestMapping(value= "/bap/transaction/transactionStatusMan.json", params = "cmd=LIST") @RequestMapping(value= "/bap/transaction/transactionStatusMan.json", params = "cmd=LIST")
public ModelAndView selectList(HttpServletRequest request, public ModelAndView selectList(HttpServletRequest request, JsonPageVo pageVo,
@RequestParam HashMap<String, Object> paramMap) throws Exception { @RequestParam HashMap<String, Object> paramMap) throws Exception {
// String date = (String)paramMap.get("searchStartYYYYMMDD"); String date = (String)paramMap.get("searchStartYYYYMMDD");
// CommonCommand command = new CommonCommand("com.eactive.eai.agent.schedule.GetScheduleBasisListCommand",date); CommonCommand command = new CommonCommand("com.eactive.eai.agent.schedule.GetScheduleBasisListCommand",date);
Map<String, Object> returnMap = agentUtilService.broadcast(command);
Iterator<String> iter = returnMap.keySet().iterator();
String svrName = iter.next();
String[] basis = null;
if(returnMap.get(svrName) instanceof String[]) {
basis = (String[])returnMap.get(svrName);
}
// String[] basis = null; if ( basis == null ){
basis = new String[1];
Map<String, Object> returnMap = null; basis[0] = "D";
Iterator<String> iter = null; }
String svrName = ""; paramMap.put("basis", basis);
// try {
// returnMap = agentUtilService.broadcast(command);
// iter = returnMap.keySet().iterator();
// svrName = iter.next();
// basis = (String[])returnMap.get(svrName);
// } catch (Exception e) {
// basis = new String[1];
// basis[0] = "D";
// }
// paramMap.put("basis", basis);
String activeTab = (String)paramMap.get("activeTab"); String activeTab = (String)paramMap.get("activeTab");
if ( activeTab.equals("tabS") ){ if ( activeTab.equals("tabS") ){
CommonCommand command = new CommonCommand("com.eactive.eai.agent.transaction.ProcessingFileTransferCommand",""); command = new CommonCommand("com.eactive.eai.agent.transaction.ProcessingFileTransferCommand","");
returnMap = agentUtilService.broadcast(command); returnMap = agentUtilService.broadcast(command);
iter = returnMap.keySet().iterator(); iter = returnMap.keySet().iterator();
svrName = iter.next(); svrName = iter.next();
@SuppressWarnings("unchecked")
List<Map<String, Serializable>> list = (List<Map<String, Serializable>>)returnMap.get(svrName); Object value = returnMap.get(svrName);
paramMap.put("procList", list);
if(value instanceof List) {
@SuppressWarnings("unchecked")
List<Map<String, Serializable>> list = (List<Map<String, Serializable>>)value;
paramMap.put("procList", list);
}else {
paramMap.put("procList", null);
}
} }
Map<String, Object> resultMap = service.selectList( paramMap); //Map<String, Object> resultMap = service.selectList( paramMap);
ModelAndView modelAndView = new ModelAndView("jsonView",resultMap); //ModelAndView modelAndView = new ModelAndView("jsonView",resultMap);
Map<String, Object> listMap = service.selectList(pageVo.getStartNum(), pageVo.getEndNum(), paramMap);
pageVo.setTotalCount((Integer)listMap.get("totalCount"));
Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("total" , pageVo.getTotal()); //전체 페이지수
resultMap.put("page" , pageVo.getPage()); //현재 페이지수
resultMap.put("records", pageVo.getTotalCount()); //전체 레코드건수
resultMap.put("rows" , listMap.get("rows"));
ModelAndView modelAndView = new ModelAndView("jsonView",resultMap);
return modelAndView; return modelAndView;
} }
@@ -135,22 +155,19 @@ public class BapTransactionStatusController extends BapBaseAnnotationController
public ModelAndView initCombo( HttpServletRequest request, public ModelAndView initCombo( HttpServletRequest request,
HttpServletResponse response) throws Exception { HttpServletResponse response) throws Exception {
List<Map<String, Object>> groupCoCd = comboService.selectListComboForTable("TSEAICM20", "code", "codename","codegroup = 'EAIGROUPCOCD' "); List<Map<String, Object>> bjobBzwkDstcd = comboService.selectListComboForTableWithCode("TSEAIBJ02", "BJOBBZWKDSTCD", "BJOBBZWKNAME");
//comboService.selectListCombo("EAIGROUPCOCD"); List<Map<String, Object>> osidInstiDstcd = service.selectOsidInstiDstcd("");
List<Map<String, Object>> bjobBzwkDstcd = comboService.selectListComboForTableWithCode("TSEAIBJ02", "BJOBBZWKDSTCD", "BJOBBZWKNAME"); // List<Map<String, Object>> uapplCd = comboService.selectListComboForTableWithCode("TSEAICM01", "TRIM(EAIBZWKDSTCD)", "BZWKDSTICNAME");
List<Map<String, Object>> osidInstiDstcd = service.selectOsidInstiDstcd("");
List<Map<String, Object>> uapplCd = comboService.selectListComboForTableWithCode("TSEAICM01", "TRIM(EAIBZWKDSTCD)", "BZWKDSTICNAME");
Map<String, Object> resultMap = new HashMap<String, Object>(); Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("bjobBzwkDstcd" , bjobBzwkDstcd); resultMap.put("bjobBzwkDstcd" , bjobBzwkDstcd);
resultMap.put("osidInstiDstcd" , osidInstiDstcd); resultMap.put("osidInstiDstcd" , osidInstiDstcd);
resultMap.put("groupCoCd" , groupCoCd); // resultMap.put("uapplCd" , uapplCd);
resultMap.put("uapplCd" , uapplCd);
ModelAndView modelAndView = new ModelAndView("jsonView",resultMap); ModelAndView modelAndView = new ModelAndView("jsonView",resultMap);
return modelAndView; return modelAndView;
} }
@RequestMapping(value= "/bap/transaction/transactionStatusMan.json",params = "cmd=LIST_ORGN_COMBO") @RequestMapping(value= "/bap/transaction/transactionStatusMan.json",params = "cmd=LIST_ORGN_COMBO")
public ModelAndView initOrgnCombo( HttpServletRequest request, public ModelAndView initOrgnCombo( HttpServletRequest request,
@@ -15,18 +15,31 @@ public class BapTransactionStatusDao extends SqlMapClientTemplateDao {
public List<Map<String, Object>> findStatusList(HashMap<String, Object> param) throws Exception { public List<Map<String, Object>> findStatusList(HashMap<String, Object> param) throws Exception {
return (List<Map<String, Object>>)template.queryForList("BapTranStatus.list_normal", param); return (List<Map<String, Object>>)template.queryForList("BapTranStatus.list_normal", param);
} }
public int findStatusListCount(HashMap<String, Object> param) throws Exception {
return (Integer)template.queryForObject("BapTranStatus.list_normal_count", param);
}
public List<Map<String, Object>> findErrorList(HashMap<String, Object> param) throws Exception { public List<Map<String, Object>> findErrorList(HashMap<String, Object> param) throws Exception {
return (List<Map<String, Object>>)template.queryForList("BapTranStatus.list_e", param); return (List<Map<String, Object>>)template.queryForList("BapTranStatus.list_e", param);
} }
public int findErrorListCount(HashMap<String, Object> param) throws Exception {
return (Integer)template.queryForObject("BapTranStatus.list_e_count", param);
}
public List<Map<String, Object>> findFutureList(HashMap<String, Object> param) throws Exception { public List<Map<String, Object>> findFutureList(HashMap<String, Object> param) throws Exception {
return (List<Map<String, Object>>)template.queryForList("BapTranStatus.list_f", param); return (List<Map<String, Object>>)template.queryForList("BapTranStatus.list_f", param);
} }
public int findFutureListCount(HashMap<String, Object> param) throws Exception {
return (Integer)template.queryForObject("BapTranStatus.list_f_count", param);
}
public List<Map<String, Object>> findDelayList(HashMap<String, Object> param) throws Exception { public List<Map<String, Object>> findDelayList(HashMap<String, Object> param) throws Exception {
return (List<Map<String, Object>>)template.queryForList("BapTranStatus.list_l", param); return (List<Map<String, Object>>)template.queryForList("BapTranStatus.list_l", param);
} }
public List<Map<String, Object>> findSpecList(HashMap<String, Object> param) throws Exception { public List<Map<String, Object>> findSpecList(HashMap<String, Object> param) throws Exception {
return (List<Map<String, Object>>)template.queryForList("BapTranStatus.speclist", param); return (List<Map<String, Object>>)template.queryForList("BapTranStatus.speclist", param);
} }
public int findSpecListCount(HashMap<String, Object> param) throws Exception {
return (Integer)template.queryForObject("BapTranStatus.speclist_count", param);
}
public HashMap<String, Object> selectDetail(HashMap<String, Object> param) throws Exception { public HashMap<String, Object> selectDetail(HashMap<String, Object> param) throws Exception {
return (HashMap<String, Object>)template.queryForObject("BapTranStatus.masterlog", param); return (HashMap<String, Object>)template.queryForObject("BapTranStatus.masterlog", param);
@@ -41,11 +54,11 @@ public class BapTransactionStatusDao extends SqlMapClientTemplateDao {
} }
public int getFileLogCount(HashMap<String, Object> param) throws Exception { public int getFileLogCount(HashMap<String, Object> param) throws Exception {
return (Integer)template.queryForObject("BapTranStatus.getFileLogCount", param); return (Integer)template.queryForObject("BapTranStatus.filelogcount", param);
} }
public int getStageLogCount(HashMap<String, Object> param) throws Exception { public int getStageLogCount(HashMap<String, Object> param) throws Exception {
return (Integer)template.queryForObject("BapTranStatus.getStageLogCount", param); return (Integer)template.queryForObject("BapTranStatus.stagelogcount", param);
} }
public List<Map<String, Object>> selectOsidInstiDstcd(HashMap<String, Object> param) throws Exception { public List<Map<String, Object>> selectOsidInstiDstcd(HashMap<String, Object> param) throws Exception {
@@ -20,46 +20,51 @@ public class BapTransactionStatusService extends BapBaseService {
@Qualifier("bapTransactionStatusDao") @Qualifier("bapTransactionStatusDao")
private BapTransactionStatusDao dao; private BapTransactionStatusDao dao;
public HashMap<String, Object> selectList(HashMap<String, Object> paramMap) throws Exception { public HashMap<String, Object> selectList(int startNum,int endNum, HashMap<String, Object> paramMap) throws Exception {
String activeTab = (String)paramMap.get("activeTab"); String activeTab = (String)paramMap.get("activeTab");
ArrayList<String> tranPrcssDstcds = new ArrayList<String>(); ArrayList<String> tranPrcssDstcds = new ArrayList<String>();
ArrayList<String> tranPrcssDstcds2 = new ArrayList<String>();
paramMap.put("startNum" , startNum);
paramMap.put("endNum" , endNum);
HashMap<String, Object> map = new HashMap<String, Object>(); HashMap<String, Object> map = new HashMap<String, Object>();
if ( activeTab.equals("tabE")){ if ( activeTab.equals("tabE")){
tranPrcssDstcds.add("T"); tranPrcssDstcds.add("T");
//tranPrcssDstcds.add("R"); tranPrcssDstcds.add("R");
paramMap.put("tranPrcssDstcds", tranPrcssDstcds); paramMap.put("tranPrcssDstcds", tranPrcssDstcds);
paramMap.put("tranPrcssDstcds2", tranPrcssDstcds2);
List<Map<String, Object>> listNomal = dao.findStatusList(paramMap); List<Map<String, Object>> listNomal = dao.findStatusList(paramMap);
List<Map<String, Object>> listError = dao.findErrorList(paramMap); List<Map<String, Object>> listError = dao.findErrorList(paramMap);
map.put("rows", processErrorList(listNomal, listError)); map.put("rows", processErrorList(listNomal, listError));
map.put("totalCount", dao.findErrorListCount(paramMap));
}else if ( activeTab.equals("tabF")){ }else if ( activeTab.equals("tabF")){
List<Map<String, Object>> listF = dao.findFutureList(paramMap); List<Map<String, Object>> listF = dao.findFutureList(paramMap);
map.put("rows", listF); map.put("rows", listF);
map.put("totalCount", dao.findFutureListCount(paramMap));
}else if ( activeTab.equals("tabQ")){ }else if ( activeTab.equals("tabQ")){
tranPrcssDstcds.add("Q"); tranPrcssDstcds.add("Q");
paramMap.put("tranPrcssDstcds", tranPrcssDstcds); paramMap.put("tranPrcssDstcds", tranPrcssDstcds);
List<Map<String, Object>> waitlist = dao.findStatusList(paramMap); List<Map<String, Object>> waitlist = dao.findStatusList(paramMap);
map.put("rows", waitlist); map.put("rows", waitlist);
map.put("totalCount", dao.findStatusListCount(paramMap));
}else if ( activeTab.equals("tabS")){ }else if ( activeTab.equals("tabS")){
tranPrcssDstcds2.add("S"); tranPrcssDstcds.add("S");
paramMap.put("tranPrcssDstcds", tranPrcssDstcds); paramMap.put("tranPrcssDstcds", tranPrcssDstcds);
paramMap.put("tranPrcssDstcds2", tranPrcssDstcds2);
List<Map<String, Object>> sendlist = dao.findStatusList(paramMap); List<Map<String, Object>> sendlist = dao.findStatusList(paramMap);
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<Map<String, Serializable>> memList = (List<Map<String, Serializable>>)paramMap.get("procList"); List<Map<String, Serializable>> memList = (List<Map<String, Serializable>>)paramMap.get("procList");
processMemList(sendlist, memList);
if(memList != null) {
processMemList(sendlist, memList);
}
map.put("rows", sendlist); map.put("rows", sendlist);
map.put("totalCount", dao.findStatusListCount(paramMap));
}else if ( activeTab.equals("tabA")){ }else if ( activeTab.equals("tabA")){
List<Map<String, Object>> listA = dao.findSpecList(paramMap); List<Map<String, Object>> listA = dao.findSpecList(paramMap);
map.put("rows", listA); map.put("rows", listA);
map.put("totalCount", dao.findSpecListCount(paramMap));
} }
return map; return map;
@@ -17,7 +17,6 @@ import org.springframework.web.servlet.ModelAndView;
import com.eactive.eai.agent.command.CommonCommand; import com.eactive.eai.agent.command.CommonCommand;
import com.eactive.eai.rms.common.base.BapBaseAnnotationController; import com.eactive.eai.rms.common.base.BapBaseAnnotationController;
import com.eactive.eai.rms.common.combo.ComboService;
import com.eactive.eai.rms.common.combo.IbatisComboService; import com.eactive.eai.rms.common.combo.IbatisComboService;
import com.eactive.eai.rms.common.login.SessionManager; import com.eactive.eai.rms.common.login.SessionManager;
import com.eactive.eai.rms.common.util.CamelCaseUtil; import com.eactive.eai.rms.common.util.CamelCaseUtil;
@@ -72,15 +71,15 @@ public class BapTransactionTraceController extends BapBaseAnnotationController
public ModelAndView initCombo( HttpServletRequest request, public ModelAndView initCombo( HttpServletRequest request,
HttpServletResponse response) throws Exception { HttpServletResponse response) throws Exception {
List<Map<String, Object>> groupCoCd = comboService.selectListComboForTable("TSEAICM20", "code", "codename","codegroup = 'EAIGROUPCOCD' "); // List<Map<String, Object>> groupCoCd = comboService.selectListComboForTable("TSEAICM20", "code", "codename","codegroup = 'EAIGROUPCOCD' ");
List<Map<String, Object>> bjobBzwkDstcd = comboService.selectListComboForTableWithCode("TSEAIBJ02", "BJOBBZWKDSTCD", "BJOBBZWKNAME"); List<Map<String, Object>> bjobBzwkDstcd = comboService.selectListComboForTableWithCode("TSEAIBJ02", "BJOBBZWKDSTCD", "BJOBBZWKNAME");
List<Map<String, Object>> uapplCd = comboService.selectListComboForTableWithCode("TSEAICM01", "TRIM(EAIBZWKDSTCD)", "BZWKDSTICNAME"); // List<Map<String, Object>> uapplCd = comboService.selectListComboForTableWithCode("TSEAICM01", "TRIM(EAIBZWKDSTCD)", "BZWKDSTICNAME");
Map<String, Object> resultMap = new HashMap<String, Object>(); Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("bjobBzwkDstcd" , bjobBzwkDstcd); resultMap.put("bjobBzwkDstcd" , bjobBzwkDstcd);
resultMap.put("groupCoCd" , groupCoCd); // resultMap.put("groupCoCd" , groupCoCd);
resultMap.put("uapplCd" , uapplCd); // resultMap.put("uapplCd" , uapplCd);
ModelAndView modelAndView = new ModelAndView("jsonView",resultMap); ModelAndView modelAndView = new ModelAndView("jsonView",resultMap);
return modelAndView; return modelAndView;
@@ -19,4 +19,8 @@ public class BapTransactionTraceDao extends SqlMapClientTemplateDao {
public List<Map<String, Object>> selectList(HashMap<String, Object> param) throws Exception { public List<Map<String, Object>> selectList(HashMap<String, Object> param) throws Exception {
return (List<Map<String, Object>>)template.queryForList("BapTransactionTrace.selectList", param); return (List<Map<String, Object>>)template.queryForList("BapTransactionTrace.selectList", param);
} }
public List<Map<String, Object>> selectOsidInstiDstcd(HashMap<String, Object> param) throws Exception {
return (List<Map<String, Object>>)template.queryForList("BapTranStatus.selectOsidInstiDstcd", param);
}
} }
@@ -34,6 +34,14 @@ public class BapTransactionTraceService extends BapBaseService {
return map; return map;
} }
public List<Map<String, Object>> selectOsidInstiDstcd(String bjobBzwkDstcd) throws Exception {
HashMap<String, Object> param = new HashMap<String, Object>();
param.put("bjobBzwkDstcd", bjobBzwkDstcd);
return dao.selectOsidInstiDstcd(param);
}
} }
@@ -86,14 +86,14 @@ public class BapTransactionWaitController extends BapBaseAnnotationController {
List<Map<String, Object>> bjobBzwkDstcd = comboService.selectListComboForTableWithCode("TSEAIBJ02", "BJOBBZWKDSTCD", "BJOBBZWKNAME"); List<Map<String, Object>> bjobBzwkDstcd = comboService.selectListComboForTableWithCode("TSEAIBJ02", "BJOBBZWKDSTCD", "BJOBBZWKNAME");
List<Map<String, Object>> osidInstiDstcd = statusService.selectOsidInstiDstcd(""); List<Map<String, Object>> osidInstiDstcd = statusService.selectOsidInstiDstcd("");
List<Map<String, Object>> svcPrcssNo = comboService.selectListComboForTable("TSEAICM20", "code", "codename","codegroup = 'SVC_PRCSS_NO' "); // List<Map<String, Object>> svcPrcssNo = comboService.selectListComboForTable("TSEAICM20", "code", "codename","codegroup = 'SVC_PRCSS_NO' ");
//comboService.selectListCombo("SVC_PRCSS_NO"); //comboService.selectListCombo("SVC_PRCSS_NO");
Map<String, Object> resultMap = new HashMap<String, Object>(); Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("bjobBzwkDstcd" , bjobBzwkDstcd); resultMap.put("bjobBzwkDstcd" , bjobBzwkDstcd);
resultMap.put("osidInstiDstcd" , osidInstiDstcd); resultMap.put("osidInstiDstcd" , osidInstiDstcd);
resultMap.put("svcPrcssNo" , svcPrcssNo); // resultMap.put("svcPrcssNo" , svcPrcssNo);
ModelAndView modelAndView = new ModelAndView("jsonView",resultMap); ModelAndView modelAndView = new ModelAndView("jsonView",resultMap);
return modelAndView; return modelAndView;
@@ -60,7 +60,7 @@ public class BapTransactionWaitService extends BapBaseService {
public void delete(HashMap paramMap) throws Exception { public void delete(HashMap paramMap) throws Exception {
dao.updateBJ03(paramMap); dao.updateBJ03(paramMap);
dao.updateBJ08(paramMap); //dao.updateBJ08(paramMap);
dao.delete(paramMap); dao.delete(paramMap);
} }
} }
@@ -37,11 +37,9 @@ public class CrossScriptingFilter implements Filter {
String uri = request.getRequestURL().toString(); String uri = request.getRequestURL().toString();
String servletPath = request.getServletPath(); String servletPath = request.getServletPath();
String baseUrl = uri.replace(servletPath, ""); String baseUrl = uri.replace(servletPath, "");
boolean isValidUrl = returnUrl.startsWith(baseUrl); // 25.11.10 - weblogic https://host:443/ 문제 대응
// System.out.println("checkReturnUrl => "+ uri + " : "+ servletPath); baseUrl = baseUrl.replace(":443", "");
// System.out.println("checkReturnUrl => "+ baseUrl + " : "+ returnUrl); return returnUrl.startsWith(baseUrl);
// System.out.println("checkReturnUrl => "+ returnUrl + " : "+ isValidUrl);
return isValidUrl;
} }
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
@@ -52,7 +50,6 @@ public class CrossScriptingFilter implements Filter {
String returnUrl = (String)request.getParameter("returnUrl"); String returnUrl = (String)request.getParameter("returnUrl");
if(returnUrl != null) { if(returnUrl != null) {
if(!checkReturnUrl(request, returnUrl)) { if(!checkReturnUrl(request, returnUrl)) {
System.out.println("CrossScriptingFilter] bad request. - " + returnUrl);
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "bad request. - "+returnUrl); response.sendError(HttpServletResponse.SC_BAD_REQUEST, "bad request. - "+returnUrl);
return; return;
} }
@@ -71,6 +71,7 @@ public class MonitoringFrontFilter implements Filter {
|| uri.indexOf(request.getContextPath() +"/LoginServlet") > -1 || uri.indexOf(request.getContextPath() +"/LoginServlet") > -1
|| uri.indexOf(request.getContextPath() +"/login/") > -1 || uri.indexOf(request.getContextPath() +"/login/") > -1
|| uri.indexOf(request.getContextPath() +"/dashboard") > -1 || uri.indexOf(request.getContextPath() +"/dashboard") > -1
|| uri.indexOf(request.getContextPath() +"/dashmain3.do") > -1
|| uri.indexOf(request.getContextPath() + "/loginForm.do") > -1 || uri.indexOf(request.getContextPath() + "/loginForm.do") > -1
|| uri.indexOf(request.getContextPath() + "/login.do") > -1 || uri.indexOf(request.getContextPath() + "/login.do") > -1
|| uri.indexOf(request.getContextPath() + "/ssoLogin.do") > -1 || uri.indexOf(request.getContextPath() + "/ssoLogin.do") > -1
@@ -563,14 +563,14 @@ public class MainController implements InterceptorSkipController {
@RequestMapping("/changePassword.do") @RequestMapping("/changePassword.do")
public String changePassword(HttpServletRequest request, public String changePassword(HttpServletRequest request,
String changePassword, String confirmPassword, String changePassword, String confirmPassword,
String userId, String password) { String resetUserId, String resetPassword) {
HttpSession session = request.getSession(); HttpSession session = request.getSession();
try { try {
// 로그인 User ID 체크. // 로그인 User ID 체크.
Optional<UserInfo> userInfoOptional = userInfoService Optional<UserInfo> userInfoOptional = userInfoService
.findById(userId); .findById(resetUserId);
if (!userInfoOptional.isPresent()) { if (!userInfoOptional.isPresent()) {
UserAccessLogger.log(request, LOG_CATEGORY_LOGIN, "F", UserAccessLogger.log(request, LOG_CATEGORY_LOGIN, "F",
@@ -604,8 +604,8 @@ public class MainController implements InterceptorSkipController {
} }
// 3. 비밀번호 체크 // 3. 비밀번호 체크
if (!userInfo.getPassword().equals(Seed.encrypt(password)) if (!userInfo.getPassword().equals(Seed.encrypt(resetPassword))
&& !userInfo.getUserid().equals(userId)) { && !userInfo.getUserid().equals(resetUserId)) {
UserAccessLogger.log(request, LOG_CATEGORY_LOGIN, "F", UserAccessLogger.log(request, LOG_CATEGORY_LOGIN, "F",
localeMessage localeMessage
.getString("login.pwdmismatch5")); .getString("login.pwdmismatch5"));
@@ -12,6 +12,8 @@ import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import com.eactive.eai.rms.common.datasource.DataSourceType; import com.eactive.eai.rms.common.datasource.DataSourceType;
import com.eactive.eai.rms.common.datasource.DataSourceTypeManager; import com.eactive.eai.rms.common.datasource.DataSourceTypeManager;
import com.eactive.eai.rms.data.PortalSchemaProviderHolder;
import com.eactive.eai.rms.env.EmsConfig;
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor { public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@@ -22,7 +24,13 @@ public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor
public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) public void postProcessBeanFactory(ConfigurableListableBeanFactory factory)
throws BeansException { throws BeansException {
// PortalSchemaProviderHolder 초기화 (Hibernate EntityManagerFactory 생성 전에 필요)
PortalSchemaProviderHolder.setProvider(() -> System.getProperty(EmsConfig.TABLE_OWNER));
if (logger.isDebugEnabled()) {
logger.debug("PortalSchemaProviderHolder initialized with tableOwner: " + System.getProperty(EmsConfig.TABLE_OWNER));
}
List<DataSourceType> dataSourceTypes = new ArrayList<DataSourceType>(); List<DataSourceType> dataSourceTypes = new ArrayList<DataSourceType>();
Map maps = factory.getBeansOfType(DataSourceType.class); Map maps = factory.getBeansOfType(DataSourceType.class);
@@ -1,8 +1,5 @@
package com.eactive.eai.rms.common.startup; package com.eactive.eai.rms.common.startup;
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
@@ -11,115 +8,117 @@ import com.eactive.eai.rms.common.util.CommonConstants;
import com.eactive.eai.rms.env.EmsConfig; import com.eactive.eai.rms.env.EmsConfig;
import com.eactive.eai.rms.onl.common.service.AdapterStatusSendThreadPool; import com.eactive.eai.rms.onl.common.service.AdapterStatusSendThreadPool;
public class AppInitializer implements InitializingBean, DisposableBean { public class AppInitializer implements InitializingBean, DisposableBean {
final Logger logger = Logger.getLogger(AppInitializer.class); final Logger logger = Logger.getLogger(AppInitializer.class);
boolean debug = true; boolean debug = true;
private String instName; private String instName;
private String tableOwner; private String tableOwner;
private String systemMode = "D"; //EAI System Mode : [P/T/D/S] private String systemMode = "D"; // EAI System Mode : [P/T/D/S]
private String themeColor = "black";
private String drMode = "";
private String eaiDatasourceType = "DEV"; // 데이터 소스 타입 :[DEV:개발/STG:스테이징/PRD:운영] ...NSG:내부서버
public void setInstName(String instName) {
this.instName = instName;
}
public void setTableOwner(String tableOwner) {
this.tableOwner = tableOwner;
}
public void setSystemMode(String systemMode) {
this.systemMode = systemMode;
}
public void setThemeColor(String themeColor) {
this.themeColor = themeColor;
}
public void setDrMode(String drMode) {
this.drMode = drMode;
}
public void setEaiDatasourceType(String eaiDatasourceType) {
this.eaiDatasourceType = eaiDatasourceType;
}
private void init()
{
if (debug) {
logger.debug("applicationInitialized");
}
//MS949로 default encoding 고정
// System.setProperty("file.encoding","MS949");
// Field charset = null;
// try {
// charset = Charset.class.getDeclaredField("defaultCharset");
// charset.setAccessible(true);
// charset.set(null, null);
// } catch (Exception e) {
// e.printStackTrace();
// }
// set default value
String serverName = System.getProperty(EmsConfig.INST_NAME);
if(serverName == null) {
System.setProperty(EmsConfig.INST_NAME, instName);
}
String tOwner = System.getProperty(EmsConfig.TABLE_OWNER);
if(tOwner == null) {
System.setProperty(EmsConfig.TABLE_OWNER, tableOwner);
}
// 서버 구분 설정(개발:D, 테스트:T, 온라인:P)
CommonConstants.SERVER_TYPE = systemMode;
//모니터링 테마 적용
String tColor = System.getProperty(EmsConfig.THEME_COLOR);
if(tColor == null || "".equals(tColor)) {
System.setProperty(EmsConfig.THEME_COLOR, themeColor);
}
if (debug) {
logger.debug(EmsConfig.DR_MODE + " = " + drMode);
}
//env 프라퍼티 파일만 있음 dr 여부 셋팅
System.setProperty(EmsConfig.DR_MODE, drMode);
//데이터 소스타입(DEV:개발 / STG:스테이징 / PRD:운영 ... ) private String themeColor = "black";
String eDatasourceType = System.getProperty(EmsConfig.DATASOURCE_TYPE);
if(eDatasourceType == null || "".equals(eDatasourceType)) { private String drMode = "";
System.setProperty(EmsConfig.DATASOURCE_TYPE, eaiDatasourceType);
} private String eaiDatasourceType = "DEV"; // 데이터 소스 타입 :[DEV:개발/STG:스테이징/PRD:운영] ...NSG:내부서버
if (debug) { public void setInstName(String instName) {
logger.debug(EmsConfig.DATASOURCE_TYPE + " =" + eaiDatasourceType); //env 프라퍼티 this.instName = instName;
} }
if(debug) { public void setTableOwner(String tableOwner) {
logger.debug("SERVER_TYPE ="+CommonConstants.SERVER_TYPE); this.tableOwner = tableOwner;
} }
}
public void setSystemMode(String systemMode) {
public void destroy() this.systemMode = systemMode;
{ }
AdapterStatusSendThreadPool.destroy();
if(debug) { public void setThemeColor(String themeColor) {
logger.debug("############ e-link WebApplication stopping... preStop ############"); this.themeColor = themeColor;
} }
}
public void setDrMode(String drMode) {
this.drMode = drMode;
}
public void setEaiDatasourceType(String eaiDatasourceType) {
this.eaiDatasourceType = eaiDatasourceType;
}
private void init() {
if (debug) {
logger.debug("applicationInitialized");
}
// MS949로 default encoding 고정
// System.setProperty("file.encoding","MS949");
// Field charset = null;
// try {
// charset = Charset.class.getDeclaredField("defaultCharset");
// charset.setAccessible(true);
// charset.set(null, null);
// } catch (Exception e) {
// e.printStackTrace();
// }
// set default value
String serverName = System.getProperty(EmsConfig.INST_NAME);
if (serverName == null) {
System.setProperty(EmsConfig.INST_NAME, instName);
}
String tOwner = System.getProperty(EmsConfig.TABLE_OWNER);
if (tOwner == null) {
System.setProperty(EmsConfig.TABLE_OWNER, tableOwner);
}
// 서버 구분 설정(개발:D, 테스트:T, 온라인:P)
CommonConstants.SERVER_TYPE = systemMode;
// 모니터링 테마 적용
String tColor = System.getProperty(EmsConfig.THEME_COLOR);
if (tColor == null || "".equals(tColor)) {
System.setProperty(EmsConfig.THEME_COLOR, themeColor);
}
if (debug) {
logger.debug(EmsConfig.DR_MODE + " = " + drMode);
}
// env 프라퍼티 파일만 있음 dr 여부 셋팅
System.setProperty(EmsConfig.DR_MODE, drMode);
// 데이터 소스타입(DEV:개발 / STG:스테이징 / PRD:운영 ... )
String eDatasourceType = System.getProperty(EmsConfig.DATASOURCE_TYPE);
if (eDatasourceType == null || "".equals(eDatasourceType)) {
System.setProperty(EmsConfig.DATASOURCE_TYPE, eaiDatasourceType);
}
if (debug) {
logger.debug(EmsConfig.DATASOURCE_TYPE + " =" + eaiDatasourceType); // env 프라퍼티
}
if (debug) {
logger.debug("SERVER_TYPE =" + CommonConstants.SERVER_TYPE);
}
if (debug) {
logger.debug("PortalSchemaProviderHolder initialized with tableOwner: " + tableOwner);
}
}
public void destroy() {
AdapterStatusSendThreadPool.destroy();
if (debug) {
logger.debug("############ e-link WebApplication stopping... preStop ############");
}
}
@Override @Override
public void afterPropertiesSet() throws Exception { public void afterPropertiesSet() throws Exception {
init(); init();
} }
} }
@@ -35,6 +35,20 @@ public class MonitoringPropertyService
return property.map(MonitoringProperty::getPrpty2Val).orElse(null); return property.map(MonitoringProperty::getPrpty2Val).orElse(null);
} }
public String getPropertyValue(String prptyGroupName, String prptyName, String defaultValue) {
MonitoringPropertyId id = new MonitoringPropertyId();
id.setPrptyGroupName(prptyGroupName);
id.setPrptyName(prptyName);
Optional<MonitoringProperty> property = repository.findById(id);
if (property.isPresent() && !property.get().getPrpty2Val().isEmpty()) {
return property.get().getPrpty2Val();
} else {
return defaultValue;
}
}
public Iterable<MonitoringProperty> findAllByIdPrptyName(String prptyName) { public Iterable<MonitoringProperty> findAllByIdPrptyName(String prptyName) {
BooleanExpression predicate = QMonitoringProperty.monitoringProperty.id.prptyName.eq(prptyName); BooleanExpression predicate = QMonitoringProperty.monitoringProperty.id.prptyName.eq(prptyName);
return repository.findAll(predicate); return repository.findAll(predicate);
@@ -38,7 +38,8 @@ public class JobHistoryService extends AbstractEMSDataSerivce<JobHistory, String
.select(qJobHistory.status) .select(qJobHistory.status)
.from(qJobHistory) .from(qJobHistory)
.where(qJobHistory.endDate.eq(maxEndDateQuery)) .where(qJobHistory.endDate.eq(maxEndDateQuery))
.fetchOne(); .fetchFirst(); // unique 에러 발생 대응
//.fetchOne();
} }
public void updateStatus(String jobName, String startDate, String endDate, String status) throws Exception { public void updateStatus(String jobName, String startDate, String endDate, String status) throws Exception {
@@ -51,7 +52,7 @@ public class JobHistoryService extends AbstractEMSDataSerivce<JobHistory, String
String rctStatus = findRecentStatus(jobName, instanceName); // 최근 Data 조회 String rctStatus = findRecentStatus(jobName, instanceName); // 최근 Data 조회
log.info("[DHJEONG]1_rctStatus-->{}, jobName-->{}, instanceName-->{}", rctStatus, jobName, instanceName); // log.info("[DHJEONG]1_rctStatus-->{}, jobName-->{}, instanceName-->{}", rctStatus, jobName, instanceName);
if (!status.equals(rctStatus) || !"E".equals(jobInfo.getChkStatus())) { if (!status.equals(rctStatus) || !"E".equals(jobInfo.getChkStatus())) {
// 'Y' 이면 무조건 등록, 'E' 이면 ==> Status 바뀌면 등록 // 'Y' 이면 무조건 등록, 'E' 이면 ==> Status 바뀌면 등록
@@ -11,6 +11,7 @@ import javax.persistence.Id;
import javax.persistence.Table; import javax.persistence.Table;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.CreatedDate;
@@ -30,7 +31,20 @@ public class UserAthrRoleChgHistory extends AbstractEntity<String> implements Se
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // @GeneratedValue(strategy = GenerationType.IDENTITY)
@GenericGenerator(
name = "TB_APIMS_USER_ATHR_ROLE_CHG_H_GEN",
strategy = "com.eactive.eai.rms.data.jpa.SchemaPrefixedSequenceGenerator",
parameters = {
@org.hibernate.annotations.Parameter(name = "sequence_name", value = "TB_APIMS_USER_ATHR_ROLE_CHG_H_SEQ"),
@org.hibernate.annotations.Parameter(name = "initial_value", value = "1"),
@org.hibernate.annotations.Parameter(name = "increment_size", value = "1")
}
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "TB_APIMS_USER_ATHR_ROLE_CHG_H_GEN"
)
@Column(name = "CHG_LOG_ID", unique = true, nullable = false) @Column(name = "CHG_LOG_ID", unique = true, nullable = false)
@Comment("사용자 정보 변경 로그 식별 ID") @Comment("사용자 정보 변경 로그 식별 ID")
private int chgLogId; private int chgLogId;
@@ -11,6 +11,7 @@ import javax.persistence.Id;
import javax.persistence.Table; import javax.persistence.Table;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.CreatedDate;
import com.eactive.eai.data.entity.AbstractEntity; import com.eactive.eai.data.entity.AbstractEntity;
@@ -30,7 +31,20 @@ public class UserLoginHistory extends AbstractEntity<String> implements Serializ
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // @GeneratedValue(strategy = GenerationType.IDENTITY)
@GenericGenerator(
name = "TB_APIMS_LOIN_L_GEN",
strategy = "com.eactive.eai.rms.data.jpa.SchemaPrefixedSequenceGenerator",
parameters = {
@org.hibernate.annotations.Parameter(name = "sequence_name", value = "TB_APIMS_LOIN_L_SEQ"),
@org.hibernate.annotations.Parameter(name = "initial_value", value = "1"),
@org.hibernate.annotations.Parameter(name = "increment_size", value = "1")
}
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "TB_APIMS_LOIN_L_GEN"
)
@Column(name="LOIN_LOG_ID", unique = true, nullable = false) @Column(name="LOIN_LOG_ID", unique = true, nullable = false)
@Comment("로그인 로그 식별자") @Comment("로그인 로그 식별자")
private int loginLogId; private int loginLogId;
@@ -9,6 +9,7 @@ import javax.persistence.SequenceGenerator;
import javax.persistence.Table; import javax.persistence.Table;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.envers.RevisionEntity; import org.hibernate.envers.RevisionEntity;
import org.hibernate.envers.RevisionNumber; import org.hibernate.envers.RevisionNumber;
import org.hibernate.envers.RevisionTimestamp; import org.hibernate.envers.RevisionTimestamp;
@@ -23,8 +24,18 @@ import lombok.Data;
@SequenceGenerator(name = "revision_seq", sequenceName = "revision_info_seq", allocationSize = 1) @SequenceGenerator(name = "revision_seq", sequenceName = "revision_info_seq", allocationSize = 1)
public class CustomRevisionEntity { public class CustomRevisionEntity {
@Id @Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "revision_seq") // @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "revision_seq")
@GenericGenerator(
name = "revision_seq_gen",
strategy = "com.eactive.eai.rms.data.jpa.SchemaPrefixedSequenceGenerator",
parameters = {
@org.hibernate.annotations.Parameter(name = "sequence_name", value = "REVISION_INFO_SEQ"),
@org.hibernate.annotations.Parameter(name = "initial_value", value = "1"),
@org.hibernate.annotations.Parameter(name = "increment_size", value = "1")
}
)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "revision_seq_gen")
@RevisionNumber @RevisionNumber
@Column(name = "REV") @Column(name = "REV")
private long rev; private long rev;
@@ -37,5 +48,4 @@ public class CustomRevisionEntity {
@Column(name = "USERID") @Column(name = "USERID")
@Comment("변경자ID") @Comment("변경자ID")
private String userId; private String userId;
} }
@@ -143,13 +143,15 @@ public class PortalApprovalManService extends BaseService {
AppRequest appRequest = optRequest.get(); AppRequest appRequest = optRequest.get();
appApprovalUI.setRequestType(appRequest.getType()); appApprovalUI.setRequestType(appRequest.getType());
if (StringUtils.isNotEmpty(appRequest.getApiGroupList())) {
String[] apiGroupList = appRequest.getApiGroupList().split(","); if (appRequest.getApiGroupList() == null || appRequest.getApiGroupList().isEmpty()) {
for (String apiGroupId : apiGroupList) { appRequest.setApiGroupList("");
apiGroupService.findByIdWithApiList(apiGroupId).ifPresent(apiGroup -> }
appApprovalUI.getApiServices().add(apiGroupUIMapper.toVo(apiGroup)) String[] apiGroupList = appRequest.getApiGroupList().split(",");
); for (String apiGroupId : apiGroupList) {
} apiGroupService.findByIdWithApiList(apiGroupId).ifPresent(apiGroup ->
appApprovalUI.getApiServices().add(apiGroupUIMapper.toVo(apiGroup))
);
} }
List<String> currentGroupNameList = new ArrayList<>(); List<String> currentGroupNameList = new ArrayList<>();
@@ -71,31 +71,50 @@ public class PortalAppApprovalListener implements ApprovalListener {
private final ClientManService clientManService; private final ClientManService clientManService;
private final MessageSendService messageSendService; private final MessageSendService messageSendService;
@Override @Override
public void execute(Approval approval, Map<String, Object> option1) throws ApprovalDeployException { public void execute(Approval approval, Map<String, Object> option1) throws ApprovalDeployException {
Optional<AppRequest> optRequest = appRequestRepository.findAppRequestByApproval(approval); Optional<AppRequest> optRequest = appRequestRepository.findAppRequestByApproval(approval);
AppRequest appRequest = optRequest.orElseGet(null); AppRequest appRequest = optRequest.orElseGet(null);
if (appRequest != null) { if (appRequest != null) {
AppRequestType type = appRequest.getType(); AppRequestType type = appRequest.getType();
CredentialUI credentialUI = null; // Portal DB에 credential 저장 (트랜잭션 커밋 보장)
CredentialUI credentialUI = saveCredential(appRequest, type);
if (appRequest.getType().equals(AppRequestType.NEW)) { // 위 메서드가 반환되면 트랜잭션이 커밋되어 Portal DB에 영구 저장됨
credentialUI = createAndSaveCredentialUI(optRequest.get()); // 이제 APIGW 동기화 및 GW 리로드 수행
} else if (appRequest.getType().equals(AppRequestType.MODIFY)) {
credentialUI = modifyClientUI(optRequest.get());
} else if (appRequest.getType().equals(AppRequestType.DELETE)) {
credentialManService.delete(optRequest.get().getClientId());
credentialUI = new CredentialUI();
credentialUI.setClientid(optRequest.get().getClientId());
}
syncTargetServer(type, credentialUI); syncTargetServer(type, credentialUI);
sendApprovalResult(appRequest); sendApprovalResult(appRequest);
} }
} }
/**
* Portal DB에 credential 정보를 저장하고 트랜잭션을 커밋합니다.
* GW 동기화 이전에 Portal DB의 변경사항이 확정되어야 하므로 별도 트랜잭션으로 분리합니다.
*
* @param appRequest 앱 등록/수정/삭제 요청 정보
* @param type 요청 타입 (NEW/MODIFY/DELETE)
* @return 저장된 credential 정보
*/
@Transactional
public CredentialUI saveCredential(AppRequest appRequest, AppRequestType type) {
CredentialUI credentialUI = null;
if (type.equals(AppRequestType.NEW)) {
credentialUI = createAndSaveCredentialUI(appRequest);
} else if (type.equals(AppRequestType.MODIFY)) {
credentialUI = modifyClientUI(appRequest);
} else if (type.equals(AppRequestType.DELETE)) {
credentialManService.delete(appRequest.getClientId());
credentialUI = new CredentialUI();
credentialUI.setClientid(appRequest.getClientId());
}
return credentialUI;
}
private void sendApprovalResult(AppRequest appRequest) { private void sendApprovalResult(AppRequest appRequest) {
MessageRecipient recipient = new MessageRecipient(); MessageRecipient recipient = new MessageRecipient();
recipient.setPhone(appRequest.getApproval().getRequester().getMobileNumber()); recipient.setPhone(appRequest.getApproval().getRequester().getMobileNumber());
@@ -118,15 +137,10 @@ public class PortalAppApprovalListener implements ApprovalListener {
clientManService.delete(credentialUI.getClientid()); clientManService.delete(credentialUI.getClientid());
} }
//TODO: commit 처리
CommonCommand.builder() CommonCommand.builder()
.name(CommonCommand.RELOAD_CLIENT_COMMAND) .name(CommonCommand.RELOAD_CLIENT_COMMAND)
.args(credentialUI.getClientid()) .args(credentialUI.getClientid())
.build().broadcast(agentUtilService); .build().broadcast(agentUtilService);
} }
private CredentialUI modifyClientUI(AppRequest appRequest) { private CredentialUI modifyClientUI(AppRequest appRequest) {
@@ -88,7 +88,7 @@ public class PortalUserApprovalListener implements ApprovalListener {
portalOrg.setOrgStatus(OrgStatus.ACTIVE); portalOrg.setOrgStatus(OrgStatus.ACTIVE);
portalOrgService.save(portalOrg); portalOrgService.save(portalOrg);
syncStaging(portalOrgUIMapper.toVo(portalOrg)); // syncStaging(portalOrgUIMapper.toVo(portalOrg));
sendApprovalResult(portalUser); sendApprovalResult(portalUser);
} }
@@ -97,42 +97,50 @@ public class PortalUserApprovalListener implements ApprovalListener {
recipient.setPhone(portalUser.getMobileNumber()); recipient.setPhone(portalUser.getMobileNumber());
recipient.setUserId(portalUser.getEmailAddr()); recipient.setUserId(portalUser.getEmailAddr());
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
messageSendService.sendMessage(MessageCode.USER_REGISTRATION_APPROVED, recipient, params); // messageSendService.sendMessage(MessageCode.USER_REGISTRATION_APPROVED, recipient, params);
messageSendService.sendMessage(MessageCode.MANAGER_WITH_ORG_REGISTER_APPROVED, recipient, params);
} }
/**
* @deprecated 광주은행에서는 사용하지 않음. (개발/운영 완전 분리)
* @param portalOrgUI
* @throws ApprovalDeployException
*/
private void syncStaging(PortalOrgUI portalOrgUI) throws ApprovalDeployException { private void syncStaging(PortalOrgUI portalOrgUI) throws ApprovalDeployException {
// 프록시를 통한 스테이징 서버 호출 추가 throw new RuntimeException("Unable use this method(syncStaging())");
Map<String, String> properties = portalPropertyService.getPortalPropertiesAsMap(PORTAL_PROPERTY_GROUP);
String apiKey = properties.get("apiKey"); // // 프록시를 통한 스테이징 서버 호출 추가
String proxyUrl = properties.get("portal.url"); // Map<String, String> properties = portalPropertyService.getPortalPropertiesAsMap(PORTAL_PROPERTY_GROUP);
String timeout = properties.getOrDefault("deploy.proxy_timeout", "10000"); // String apiKey = properties.get("apiKey");
String proxyEndpoint = proxyUrl + "/_onl/apim/portalorg/portalOrgMan.json"; // String proxyUrl = properties.get("portal.url");
// String timeout = properties.getOrDefault("deploy.proxy_timeout", "10000");
HttpHeaders headers = new HttpHeaders(); // String proxyEndpoint = proxyUrl + "/_onl/apim/portalorg/portalOrgMan.json";
headers.setContentType(MediaType.APPLICATION_JSON); //
headers.set("X-API-KEY", apiKey); // HttpHeaders headers = new HttpHeaders();
headers.set("target_host", "stg"); // headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("action", "insert"); // headers.set("X-API-KEY", apiKey);
// headers.set("target_host", "stg");
portalOrgUI.setCompRegFile(null); // headers.set("action", "insert");
HttpEntity<PortalOrgUI> request = new HttpEntity<>(portalOrgUI, headers); //
// portalOrgUI.setCompRegFile(null);
try { // HttpEntity<PortalOrgUI> request = new HttpEntity<>(portalOrgUI, headers);
ResponseEntity<String> response = createRestTemplateWithTimeout(Integer.parseInt(timeout)).exchange( //
proxyEndpoint, // try {
HttpMethod.POST, // ResponseEntity<String> response = createRestTemplateWithTimeout(Integer.parseInt(timeout)).exchange(
request, // proxyEndpoint,
String.class // HttpMethod.POST,
); // request,
// String.class
if (!response.getStatusCode().is2xxSuccessful()) { // );
logger.error("Failed to sync with staging server. Status: {}, Body: {}", response.getStatusCode(), response.getBody()); //
throw new ApprovalDeployException("기관 정보 배포에 실패 했습니다."); // if (!response.getStatusCode().is2xxSuccessful()) {
} // logger.error("Failed to sync with staging server. Status: {}, Body: {}", response.getStatusCode(), response.getBody());
} catch (Exception e) { // throw new ApprovalDeployException("기관 정보 배포에 실패 했습니다.");
logger.error("Failed to sync with staging server. {}", e.getMessage()); // }
throw new ApprovalDeployException("기관 정보 배포에 실패 했습니다."); // } catch (Exception e) {
} // logger.error("Failed to sync with staging server. {}", e.getMessage());
// throw new ApprovalDeployException("기관 정보 배포에 실패 했습니다.");
// }
} }
@Override @Override
@@ -5,9 +5,11 @@ import com.eactive.apim.portal.file.entity.FileInfo;
import com.eactive.apim.portal.file.service.FileService; import com.eactive.apim.portal.file.service.FileService;
import com.eactive.apim.portal.file.service.FileTypeContext; import com.eactive.apim.portal.file.service.FileTypeContext;
import com.eactive.apim.portal.portalNotice.entity.PortalNotice; import com.eactive.apim.portal.portalNotice.entity.PortalNotice;
import com.eactive.eai.common.util.ContainerUtil;
import com.eactive.eai.rms.common.base.BaseService; import com.eactive.eai.rms.common.base.BaseService;
import com.eactive.eai.rms.data.entity.onl.apim.portalnotice.PortalNoticeService; import com.eactive.eai.rms.data.entity.onl.apim.portalnotice.PortalNoticeService;
import com.eactive.eai.rms.data.entity.onl.apim.portalnotice.PortalNoticeUISearch; import com.eactive.eai.rms.data.entity.onl.apim.portalnotice.PortalNoticeUISearch;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -18,19 +20,28 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Optional; import java.util.Optional;
@Service @Service
@Transactional(transactionManager = "transactionManagerForEMS") @Transactional(transactionManager = "transactionManagerForEMS")
@Slf4j
public class PortalNoticeManService extends BaseService { public class PortalNoticeManService extends BaseService {
private final PortalNoticeService portalNoticeService; private final PortalNoticeService portalNoticeService;
private final PortalNoticeUIMapper portalNoticeUIMapper; private final PortalNoticeUIMapper portalNoticeUIMapper;
private final FileService fileService; private final FileService fileService;
private String decodeString(String value) { private String decodeString(String value) {
// return new String(value.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); if (ContainerUtil.get() == ContainerUtil.TOMCAT) {
try {
return new String(value.getBytes("euc-kr"), StandardCharsets.UTF_8);
} catch (UnsupportedEncodingException e) {
log.warn("Failed euc-kr to UTF-8", e);
return value;
}
}
return new String(value.getBytes(Charset.defaultCharset()), StandardCharsets.UTF_8); return new String(value.getBytes(Charset.defaultCharset()), StandardCharsets.UTF_8);
} }
@@ -102,7 +113,7 @@ public class PortalNoticeManService extends BaseService {
if (file != null && !file.isEmpty()) { // 새로운 파일이 업로드된 경우에만 처리 if (file != null && !file.isEmpty()) { // 새로운 파일이 업로드된 경우에만 처리
String decodedFileName = decodeString(portalNoticeUI.getFileName()); String decodedFileName = decodeString(portalNoticeUI.getFileName());
FileTypeContext.setFileType("notice"); FileTypeContext.setFileType("notice");
FileInfo fileInfo = fileService.createOrUpdateSingleFile(portalNotice.getFileId(), file, decodedFileName); FileInfo fileInfo = fileService.createOrUpdateSingleFile(portalNotice.getFileId(), file, decodedFileName, true);
if (fileInfo != null) { if (fileInfo != null) {
portalNotice.setFileId(fileInfo.getFileId()); portalNotice.setFileId(fileInfo.getFileId());
@@ -56,15 +56,6 @@ public class PortalOrgManController extends BaseAnnotationController {
return ResponseEntity.ok(result); return ResponseEntity.ok(result);
} }
@PostMapping(value = "/onl/apim/portalorg/portalOrgMan.json", params = "cmd=UNMASK")
public ResponseEntity<Map<String, Object>> selectDetailUnmask(String id, String reason) {
if (StringUtils.isBlank(reason)) {
throw new BizException("마스킹 해제 사유를 입력해 주세요.");
}
Map<String, Object> result = portalOrgManService.selectDetailWithUsersUnmask(id);
return ResponseEntity.ok(result);
}
@PostMapping(value = "/onl/apim/portalorg/portalOrgMan.json", params = "cmd=LIST_INIT_COMBO") @PostMapping(value = "/onl/apim/portalorg/portalOrgMan.json", params = "cmd=LIST_INIT_COMBO")
public ResponseEntity<Map<String, Object>> initCombo() { public ResponseEntity<Map<String, Object>> initCombo() {
List<ComboVo> approvalStatusList = comboService.getMonitoringCodeSortedBySeq("APPROVE_STATUS_CODE"); // 승인상태코드 List<ComboVo> approvalStatusList = comboService.getMonitoringCodeSortedBySeq("APPROVE_STATUS_CODE"); // 승인상태코드
@@ -172,25 +172,9 @@ public class PortalOrgManService extends BaseService {
private PortalUserCorpManagerUI convertCorporateManagerToUIWithMaskOption(PortalUser corporateManager, boolean isMasked) { private PortalUserCorpManagerUI convertCorporateManagerToUIWithMaskOption(PortalUser corporateManager, boolean isMasked) {
PortalUserCorpManagerUI ui = portalUserCorpManagerUIMapper.toVo(corporateManager); PortalUserCorpManagerUI ui = portalUserCorpManagerUIMapper.toVo(corporateManager);
if (ui != null && isMasked) {
if (StringUtils.isNotBlank(ui.getUserName())) {
ui.setUserName(MaskingUtils.maskName(ui.getUserName()));
}
if (StringUtils.isNotBlank(ui.getEmailAddr())) {
ui.setEmailAddr(MaskingUtils.maskEmailId(ui.getEmailAddr()));
}
if (StringUtils.isNotBlank(ui.getMobileNumber())) {
ui.setMobileNumber(MaskingUtils.maskPhoneNumber(ui.getMobileNumber()));
}
}
return ui; return ui;
} }
public Map<String, Object> selectDetailWithUsersUnmask(String id) {
return getDetailWithUsers(id, false);
}
private void setFileInfo(PortalOrg portalOrg, PortalOrgUI ui) { private void setFileInfo(PortalOrg portalOrg, PortalOrgUI ui) {
Optional.ofNullable(portalOrg.getCompRegFile()) Optional.ofNullable(portalOrg.getCompRegFile())
.filter(StringUtils::isNotBlank) .filter(StringUtils::isNotBlank)
@@ -41,9 +41,11 @@ public class PortalUserManService extends BaseService {
private final PortalOrgService portalOrgService; private final PortalOrgService portalOrgService;
private final FileService fileService; private final FileService fileService;
private final PortalOrgManService portalOrgManService; private final PortalOrgManService portalOrgManService;
private final PasswordEncoder passwordEncoder; // private final PasswordEncoder passwordEncoder;
private final PasswordEncoder kjbSafedbPasswordEncoder;
private final PortalUserTermsService portalUserTermsService; private final PortalUserTermsService portalUserTermsService;
public Page<PortalUserUI> selectList(Pageable pageable, PortalUserUISearch portalUserUISearch) { public Page<PortalUserUI> selectList(Pageable pageable, PortalUserUISearch portalUserUISearch) {
Page<PortalUser> portalUser = portalUserService.findAll(pageable, portalUserUISearch); Page<PortalUser> portalUser = portalUserService.findAll(pageable, portalUserUISearch);
return portalUser.map(entity -> { return portalUser.map(entity -> {
@@ -122,7 +124,7 @@ public class PortalUserManService extends BaseService {
} }
PortalUser portalUser = portalUserUIMapper.toEntity(portalUserUI); PortalUser portalUser = portalUserUIMapper.toEntity(portalUserUI);
portalUser.setPasswordHash(passwordEncoder.encode("!" + portalUserUI.getLoginId())); portalUser.setPasswordHash(kjbSafedbPasswordEncoder.encode("!" + portalUserUI.getLoginId()));
portalUser.setLoginFailureCount(0); portalUser.setLoginFailureCount(0);
portalUser.setAccountLockYn("N"); portalUser.setAccountLockYn("N");
portalUser.setEmailAddr(portalUserUI.getLoginId()); portalUser.setEmailAddr(portalUserUI.getLoginId());
@@ -50,4 +50,5 @@ public class PortalUserUI {
@DateTimeFormat(pattern = "yyyyMMddHHmmss") @DateTimeFormat(pattern = "yyyyMMddHHmmss")
private LocalDateTime lastModifiedDate; private LocalDateTime lastModifiedDate;
private String accountLockYn;
} }
@@ -1,6 +1,5 @@
package com.eactive.eai.rms.onl.apim.template; package com.eactive.eai.rms.onl.apim.template;
import com.eactive.apim.portal.template.entity.MessageCode;
import com.eactive.apim.portal.template.entity.MessageTemplate; import com.eactive.apim.portal.template.entity.MessageTemplate;
import com.eactive.eai.rms.common.base.BaseService; import com.eactive.eai.rms.common.base.BaseService;
import com.eactive.eai.rms.data.entity.onl.apim.template.MessageTemplateSearch; import com.eactive.eai.rms.data.entity.onl.apim.template.MessageTemplateSearch;
@@ -2,11 +2,16 @@ package com.eactive.eai.rms.onl.common.service;
import com.eactive.eai.rms.onl.common.service.ums.UmsDispatchService; import com.eactive.eai.rms.onl.common.service.ums.UmsDispatchService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.quartz.Job; import org.quartz.Job;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* Admin Job Configuration * Admin Job Configuration
* ---------------------- * ----------------------
@@ -17,17 +22,37 @@ import org.springframework.beans.factory.annotation.Autowired;
// Cron Expression: */5 * * * * ? // Cron Expression: */5 * * * * ?
@Slf4j @Slf4j
public class UmsDispatchJob implements Job { public class UmsDispatchJob implements Job {
private final UmsDispatchService umsDispatchService; private final UmsDispatchService umsDispatchService;
@Autowired @Autowired
public UmsDispatchJob(UmsDispatchService umsDispatchService) { public UmsDispatchJob(UmsDispatchService umsDispatchService) {
this.umsDispatchService = umsDispatchService; this.umsDispatchService = umsDispatchService;
} }
@Override @Override
public void execute(JobExecutionContext context) throws JobExecutionException { public void execute(JobExecutionContext context) throws JobExecutionException {
log.info("Starting Message Dispatch Job..."); log.info("Starting Message Dispatch Job...");
// inst.Name 이 지정된 경우 해당 인스턴스에서만 동작
String jobInstName = context.getJobDetail().getJobDataMap().getString("execute.instances");
if (StringUtils.isNotEmpty(jobInstName)) {
log.debug("Job 실행 인스턴스 명이 지정되어 있음 - {}", jobInstName);
jobInstName = jobInstName.toLowerCase();
Set<String> propInstances = Arrays.stream(jobInstName.split(",")).map(String::trim).collect(Collectors.toSet());
String instanceName = System.getProperty("inst.Name");
if (StringUtils.isNotEmpty(instanceName)) {
log.debug("현재 인스턴스 명 : {}", instanceName);
instanceName = instanceName.trim().toLowerCase();
if (!propInstances.contains(instanceName)) {
log.debug("Job 인스턴스명과 현재 인스턴스명이 다름. 종료 처리");
return;
}
}
}
try { try {
umsDispatchService.processMessages(); umsDispatchService.processMessages();
} catch (Exception e) { } catch (Exception e) {
@@ -1,8 +1,12 @@
package com.eactive.eai.rms.onl.common.service.ums; package com.eactive.eai.rms.onl.common.service.ums;
import com.eactive.apim.portal.template.entity.MessageRequest; import com.eactive.apim.portal.template.entity.MessageRequest;
import com.eactive.apim.portal.template.repository.MessageRequestRepository;
import edu.emory.mathcs.backport.java.util.Collections; import com.eactive.eai.rms.data.entity.man.monitoringProperty.service.MonitoringPropertyService;
import com.eactive.ext.kjb.common.KjbProperty;
import com.eactive.ext.kjb.ums.KjbEmailSendModule;
import com.eactive.ext.kjb.ums.KjbUmsService;
import com.eactive.ext.kjb.util.KjbPropertyInjector;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
@@ -15,15 +19,17 @@ import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import java.io.IOException; import java.io.IOException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.*; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
@Service @Service
@Transactional(transactionManager = "transactionManagerForEMS") @Transactional(transactionManager = "transactionManagerForEMS")
public class UmsDispatchService { public class UmsDispatchService {
public static final String PROP_GORUP_ID = "Monitoring";
private final ThreadPoolExecutor executorService; private final ThreadPoolExecutor executorService;
private final TransactionTemplate transactionTemplate; private final TransactionTemplate transactionTemplate;
@@ -36,15 +42,25 @@ public class UmsDispatchService {
@PersistenceContext(unitName = "entityManagerFactoryForEMS") @PersistenceContext(unitName = "entityManagerFactoryForEMS")
private EntityManager entityManager; private EntityManager entityManager;
@Autowired private final MessageRequestRepository messageRequestRepository;
private UmsSender umsSender; private final KjbUmsService kjbUmsService;
private final KjbEmailSendModule kjbEmailSendModule;
private final KjbPropertyInjector kjbPropertyInjector;
@Autowired
private StandardMessageFactory messageFactory;
@Autowired @Autowired
public UmsDispatchService( public UmsDispatchService(
@Qualifier("transactionManagerForEMS") PlatformTransactionManager transactionManager) { @Qualifier("transactionManagerForEMS") PlatformTransactionManager transactionManager,
MonitoringPropertyService monitoringPropertyService,
MessageRequestRepository messageRequestRepository
) {
this.kjbPropertyInjector = new KjbPropertyInjector(monitoringPropertyService, PROP_GORUP_ID);
this.messageRequestRepository = messageRequestRepository;
// this.kjbEmailService = kjbEmailService;
// this.kjbSafedbWrapper = kjbSafedbWrapper;
// this.monitoringPropertyService = monitoringPropertyService;
this.executorService = new ThreadPoolExecutor( this.executorService = new ThreadPoolExecutor(
CORE_POOL_SIZE, CORE_POOL_SIZE,
MAX_POOL_SIZE, MAX_POOL_SIZE,
@@ -56,6 +72,20 @@ public class UmsDispatchService {
this.transactionTemplate = new TransactionTemplate(transactionManager); this.transactionTemplate = new TransactionTemplate(transactionManager);
log.debug("UmsDispatchService initialized with thread pool - core: {}, max: {}, queue: {}", log.debug("UmsDispatchService initialized with thread pool - core: {}, max: {}, queue: {}",
CORE_POOL_SIZE, MAX_POOL_SIZE, QUEUE_CAPACITY); CORE_POOL_SIZE, MAX_POOL_SIZE, QUEUE_CAPACITY);
KjbProperty prop = new KjbProperty();
// prop.setEaiBatchUrl(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.url"));
// prop.setUmsEaiBatchSendDir(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.send_dir"));
// prop.setUmsEaiBatchBackupDir(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.backup_dir"));
// prop.setUmsEaiBatchInterfaceId(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.interface_id"));
// prop.setUmsHostUrl(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.host_url"));
// prop.setUmsApiKey(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.api_key"));
prop = kjbPropertyInjector.inject(prop);
this.kjbUmsService = new KjbUmsService(prop);
this.kjbEmailSendModule = KjbEmailSendModule.getInstance(prop, messageRequestRepository);
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -98,6 +128,9 @@ public class UmsDispatchService {
} }
} else { } else {
log.info("No pending messages found"); log.info("No pending messages found");
// 발송 메세지가 없을 때 파일 삭제 처리 진행
} }
} }
@@ -110,7 +143,17 @@ public class UmsDispatchService {
try { try {
transactionTemplate.execute(status -> { transactionTemplate.execute(status -> {
try { try {
processMessage(message); // 광주은행에서는 사용하지 않는 메소드
// processMessage(message);
if (KjbUmsService.isAllowChannel(message)) {
kjbUmsService.send(message);
}
if (KjbEmailSendModule.isAllowChannel(message)) {
kjbEmailSendModule.sendEmail(message);
}
return null; return null;
} catch (Exception e) { } catch (Exception e) {
log.error("Failed to process message: {} - Error: {}", log.error("Failed to process message: {} - Error: {}",
@@ -127,21 +170,27 @@ public class UmsDispatchService {
}); });
} }
public void processMessage(MessageRequest message) throws IOException { /**
try { * kbank 방식으로 광주은행에서는 사용하지 않음
String standardMessage = messageFactory.createMessage(message); * @param message
log.debug("Processing message ID: {} - Type: {}", message.getId(), message.getMessageType()); * @throws IOException
*/
umsSender.sendMessage(standardMessage); // @Deprecated
updateMessageStatus(message, "SENT"); // public void processMessage(MessageRequest message) throws IOException {
log.debug("Successfully processed and sent message ID: {}", message.getId()); // try {
} catch (Exception e) { // String standardMessage = messageFactory.createMessage(message);
log.error("Message processing failed for ID: {} - Error: {}", // log.debug("Processing message ID: {} - Type: {}", message.getId(), message.getMessageType());
message.getId(), e.getMessage(), e); //
updateMessageStatus(message, "FAILED"); // umsSender.sendMessage(standardMessage);
throw e; // updateMessageStatus(message, "SENT");
} // log.debug("Successfully processed and sent message ID: {}", message.getId());
} // } catch (Exception e) {
// log.error("Message processing failed for ID: {} - Error: {}",
// message.getId(), e.getMessage(), e);
// updateMessageStatus(message, "FAILED");
// throw e;
// }
// }
public void updateMessageStatus(MessageRequest message, String status) { public void updateMessageStatus(MessageRequest message, String status) {
message.setRequestStatus(status); message.setRequestStatus(status);
@@ -16,8 +16,12 @@ import org.springframework.stereotype.Component;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
/**
* 25.11.05 - 광주은행 미사용 클래스
*/
@Slf4j @Slf4j
@Component @Component
@Deprecated
public class UmsSender { public class UmsSender {
private final MonitoringPropertyService monitoringPropertyService; private final MonitoringPropertyService monitoringPropertyService;
@@ -268,7 +268,7 @@ public class ApiInterfaceController extends OnlBaseAnnotationController {
.body(exportData.getExportFileContent()); .body(exportData.getExportFileContent());
} }
@PostMapping(value = "/onl/transaction/apim/apiInterfaceMan.json", params = "cmd=INSERT_CLONE") @PostMapping(value = "/onl/transaction/apim/apiInterfaceMan.json", params = "cmd=CLONE")
public ResponseEntity<?> cloneApiInterface(String orgApiInterfaceId, String newBizCode, String newApiInterfaceId, String newInboundHttpMethod, String newInboundRestPath) throws BizException { public ResponseEntity<?> cloneApiInterface(String orgApiInterfaceId, String newBizCode, String newApiInterfaceId, String newInboundHttpMethod, String newInboundRestPath) throws BizException {
try { try {
ApiInterfaceUI orgApiInterfaceUI = service.selectDetail(orgApiInterfaceId); ApiInterfaceUI orgApiInterfaceUI = service.selectDetail(orgApiInterfaceId);

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